Map
why ? what ? when ? how ?
Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。
AbstractMap:实现了Map接口的抽象类。Map的基本实现,其他Map的实现类可以通过继承AbstractMap来减少编码量。
SortedMap:继承Map。保证按照键的升序排列的映射,对entrySet、keySet和values方法返回的结果进行迭代时,顺序就会反映出来。
NavigableMap:继承SortedMap,含有返回特定条件最近匹配的导航方法。
HashMap:Map接口基于哈希表的实现,是使用频率最高的用于键值对处理的数据类型。它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,特点是访问速度快,遍历顺序不确定,线程不安全,最多允许一个key为null,允许多个value为null。可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap类。
HashTable:Hashtable和HashMap从存储结构和实现来讲有很多相似之处,不同的是它承自Dictionary类,而且是线程安全的,另外Hashtable不允许key和value为null。并发性不如ConcurrentHashMap,因为ConcurrentHashMap引入了分段锁。Hashtable不建议在新代码中使用,不需要线程安全的场合可以使用HashMap,需要线程安全的场合可以使用ConcurrentHashMap。
LinkedHashMap: LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现。它维护着一个双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。
TreeMap : Map接口基于红黑树的实现。
Map接口提供了三种集合视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
- keySet
- values
- entrySet
Entry 是 Map 接口中的静态内部接口,表示一个键值对的映射。Entry 具有的方法:
getKey() , 获取这组映射中的键 key
getValue() , 获取这组映射中的值 value
setValue() , 修改这组映射中的值
hashCode() , 返回这个 Entry 的哈希值
equals() , 对比 key-value 是否相等
Set<Integer> set =map.keySet();
for (Integer integer : set) {
System.out.println(integer);
}
Collection<Integer>collection=map.values();
Iterator<Integer> iterator=collection.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
Set<Map.Entry<Integer,Integer>> entrySet=map.entrySet();
for (Map.Entry<Integer, Integer> entry : entrySet) {
Integer key=entry.getKey();
Integer value=entry.getValue();
System.out.println(key+" "+value);
}
参考
潘威威 https://blog.csdn.net/panweiwei1994/article/details/77185902