Map是一种键-值(key-value)集合,Map集合中的每一个元素都有一个键对象和一个值对象。其中键对象不允许重复,值对象可以重复。在《Java的编程》一书中,Map的实现主要有以下几种。
| 实现类 | 说明 |
|---|---|
| HashMap | Map基于散列表的实现(它取代了HashTable)。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量和负载因子,以调整容器的性能。 |
| linkedHashMap | 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序时其插入次序,或者时最近最少使用(LRU)的次序。只比Hash Map慢一点;而在迭代访问时反而更快,因为它使用链表维护内部次序。 |
| TreeMap | 基于红黑树的实现。查看“键”或“键值对”时,它们会被排序(次序有Comparable或Comparator决定)。TreeMap的特点在于,所得到的结果是经过排序的。TreeMap是唯一带有subMap()方法的Map,它可以返回一个字数。 |
| WeakHashMap | 弱键(weak key)映射,允许释放映射所指向的对象;这是为解决某类特殊问题而设计的。如果映射之外没有引用指向某个“键”,则此“键”可以被垃圾收集器回收。 |
| ConcurrentHashMap | 一种线程安全的Map,他不涉及同时加锁。 |
| IdentityHashMap | 使用==代替equals()对“键”进行比较的散列映射。专为解决特殊问题而设计的 |
注:在没有特殊需求的情况下默认选用HashMap,因为它对速度进行优化。
Map接口常用的方法如下表所示:
| 方法名称 | 说明 |
|---|---|
| get(Object key) | 返回 Map 集合中指定键对象所对应的值。 |
| put(K key, V value) | 向 Map 集合中添加键-值对。 |
| remove(Object key) | 从 Map 集合中删除 key 对应的键-值对。 |
| containsKey(Object Key) | 是否包含某个元素。 |
| entrySet() | 返回 Map中所包含映射的 Set视图。 Set 中的每个元素都是一个 Map.Entry对象,可以使用 getKey()和 getValue()方法(还有一个 setValue()方法)访问后者的键元素和值元素 |
| keySet() | 返回 Map中所包含键的 Set 视图。删除 Set中的元素还将删除 Map中相应的映射(键和值) |



