浅谈Java中的Map
Map概述
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
Map接口和Collection接口有何不同:
- Map是双列的,Collection是单列的
- Map的键唯一,Collection的子体系Set是唯一的
- Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
Entry
Map中还有一个嵌套接口Entry
成员方法
成员方法
Map中元素的遍历
对于Map中的元素进行遍历的时候,有两种方式:
- 使用键来找值。先获取Map中键的集合,再根据键获取到其对应的值。
- 获取Map中的键值对,在键值对中分别获取键和值。
HashMap
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。
此类不保证映射的顺序,特别是它不保证该顺序恒久不变,即HashMap中的元素的存取顺序是不一致的。此实现不是同步的。
构造方法
成员方法
HashMap和Hashtable的区别
HashMap和Hashtable在方法的使用上,没有多大的区别。在线程安全上有区别。
HashMap:线程不安全,效率高,允许键和值是null。实现不是同步的。
Hashtable:线程安全,效率低,不允许键和值是null。实现是同步的。
LinkedHashMap
Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序),即LinkedHashMap中的元素的存取顺序是一致的。
构造方法
成员方法
TreeMap
基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。 此实现不是同步的。