集是一个鸠合,它可以疾速地查找现有的元素。然则,要检察一个元素,须要有要查找元素的准确副本。这不是一种异常通用的查找体式格局,由于在鸠合中查找元素老是要遍历鸠合。一般,我们晓得某些键的信息,并想要查找与之对应的元素。映照(map)数据结构就是为此而设想的。映照用来寄存键/值对。假如供应了键,就可以查找到值。它们之间是一一对应关联。
基础映照操纵:
Java类库为映照供应了两个通用的完成:HashMap和TreeMap,这两个类都完成了Map接口
散列映照(HashMap)对键举行散列,树映照(TreeMap)用键的团体递次对元素举行排序,并将其组织成搜刮树。
散列或比较函数只能作用于键。与键关联的值不不能举行散列或比较
与集一样,散列映照比树映照轻微快一些,所以在不须要根据分列递次接见键的时刻,最好选用散列映照
OP->>要举行键值存储,必需运用put要领
OP->>要举行键值接见,必需运用get要领,且只能经由过程键来接见到值
OP->>假如找不到值却不想返回一个空对象,则运用getOrDefault(var1,var2),假如找不到值则返回var2。
键必需是唯一的,假如对一对映照挪用两次put要领,则后一次挪用会掩盖前一次挪用。并返回第一次挪用的效果
OP->>要举行键值对的移除,则要运用remove(键)的要领
OP->>要想猎取键值对的数目,则要运用size()要领
OP->>要迭代处置惩罚每一个键和值,最好是运用forEach要领,可以向这个要领供应一个lambda表达式,用来顺次处置惩罚映照中的每一个元素
类似于scores.forEach((k,v)->System.out.println("key="+k+",value="+v));
下面示例顺序演示了映照的操纵过程,首先将键/值对添加到映照中。然后从映照中删除一个键,同时与之对应的值也被删除了。接下来,修正与某一个键对应的值,并挪用get要领检察这个值。末了,迭代处置惩罚条目集。
代码:
package Collection.Map; import java.util.*; public class MapTest { public static void main(String[] args) { Map<String,Employee> staff=new HashMap<>(); staff.put("144-25-5464", new Employee("Amy Lee")); staff.put("567-24-2546", new Employee("Harry Hacker")); staff.put("157-62-7935", new Employee("Gary Cooper")); staff.put("456-62-5527", new Employee("Francesca Cruz")); //打印一切成员 System.out.println(staff); //删除某一成员 staff.remove("567-24-2546"); //替换一个成员 staff.put("456-62-5527", new Employee("Francesca Miller")); //检察一个成员 System.out.println(staff.get("157-62-7935")); //遍历映照 staff.forEach((k,v)->System.out.println("key="+k+",value="+v)); } } class Employee{ String name; public Employee(String name) { this.name = name; } public String toString() { return "[name="+name+"]"; } }
运转效果:
下面是接口Map中经常使用的几个要领及其诠释:
V get(Object key)
猎取与键对应的值;返回与键对应的对象,假如在映照中没有这个对象则返回null。键可认为null。
default V getOrDefault(Object key,V defaultValue)
获得与键关联的值;返回与键关联的对象,或许假如未在映照中找到这个键,则返回defaultValue。
V put(K key,V value)
将键与对应的值关联插进去到映照中。假如这个键已存在,新的对象将取代与这个键对应的旧对象。这个要领将返回键对应的旧值。假如这个键之前没有涌现过则返回null。键可认为null,但值不能为null。
void putAll(Map<? extends K,? extends V> entries)
将给定映照中一切条目添加到这个映照中。
boolean containsKey(Object key)
假如映照中已有这个键,则返回true。
boolean containsValue(Object value)
假如映照中已有这个值,返回true。
default void forEach(BiConsumer<? super K,? super V> action)
对这个映照中的一切键/值运用这个行动。
下面是HashMap类中的经常使用要领:
HashMap()
HashMap(int initialCapacity)
HashMap(int initialCapacity,float loadFactor)
用给定的容量和装填因子组织一个空散列映照(装填因子是一个0.0~1.0之间的一个数值。这个数值决议散列表添补百分比。一旦到了这个比例,就要将其再散列到更大的表中)。默许的装填因子是0.75。
下面是TreeMap类中经常使用的要领:
TreeMap()
为完成Comparable接口的键组织一个空的树映照。
TreeMap(Comparator<? super K> c)
组织一个树映照,并运用一个指定的比较器对键举行排序。
TreeMap(Map<? extends K,? extends V> entries)
组织一个树映照,并将某个映照中的一切条目添加到树映照中。
TreeMap(SortedMap<? extends K,? extends V> entries)
组织一个树映照,将某个有序映照中的一切条目添加到树映照中,并运用与给定的有序映照雷同的比较器。
下面是SortedMap接口的一些主要的要领:
Comparator<? super K> comparator()
返回键举行排序的比较器。假如键是用Comparable接口的comparaTo要领举行比较的,返回null。
K firstKey()
K lastKey()
返回映照中最小元素和最大元素。
ki4网,大批的免费Java入门教程,迎接在线进修!
以上就是java什么是映照的细致内容,更多请关注ki4网别的相干文章!