java 集合框架(十六)Map

一.概述

  Map是一个包含键值对的集合,一个map不能有重复的键(key),并且每一个键至多只能对应一个值.Map同Collection同样,它的全部通用实现都会提供一个转换器构造函数,接收一个Map类型集合,并以此初始化本身,这样只要是Map的实现均可以相互之间转换.数组

  和List与Set同样,Map强化了equal和hashCode以能对两个Map对象实现逻辑上的比较.若是两个Map实例有相同的键值对,那么它们是相等的.缓存

 

  Map的集合视角方法使Map能够像Collection同样进行操做元素安全

  • KeySet--返回Map集合中键的Set集合
  • Values--返回Map集合中值的Collection集合
  • entrySet--返回Map集合中键值对对象的Set集合.在Map中提供了一个小的嵌套接口Map.Entry,它就是Map的键值对对象.

  Map没有实现Iterable接口,因此集合视角是Map集合遍历的惟一手段,而且每次获取Map集合视角的时候,返回的是相同的对象.集合视角支持removal类型操做,可是任何状况下都不支持addition,对集合视角的removal操做会影响到Map集合自己,好比map.keySet().clear()将会清空map,反之亦然,这和Set,List的视图同样.数据结构

  使用集合视角有一些有意思的用法,好比判断一个Map是不是另外一个Map的子集并发

    if (m1.entrySet().containsAll(m2.entrySet())) {}函数

  相似,也能够判断两个Map的是否拥有相同的键高并发

    if (m1.keySet().equals(m2.keySet())) {}性能

三.子接口

  Map和Set接口从形式上有些相似,类比与SortedSet和NavigableSet,Map也有SortedMap和NavigableMap两个接口,实际上Set的实现底层就是使用的Map存储数据.spa

  SortedMap将元素的键以天然排序,或者依照给定的排序器来进行排序,同SortedSet,SortedMap提供了如下几种操做.3d

  • 视图--容许从SortedMap截取并返回任意范围的元素视图
  • 端点操做---能够直接获取集合头或尾的元素
  • 排序器---返回用于排列元素的排序器

  Map集合并没有法直接实现遍历,而是经过它的集合视角遍历元素,因此SortedMap在返回的集合视角中,集合视角的迭代器也将会按SortedMap的顺序进行排序,同理的SortedMap中toArray方法返回的数组也是如此,toString方法会返回一个包含全部元素,并排序好的字符串.

 四.实现

  Map的实现能够分红通用实现,专用实现,并发实现

  通用实现有三个,HashMap,TreeMap和LinkedHashMap.若是咱们想要对元素进行一些排序操做,那么应当使用TreeMap,若是咱们想要最好的性能而不在意是否排序,应当使用HashMap,若是须要和HashMap接近的性能,而且能够以插入顺序遍历,那么应当使用LinkedHashMap.这和Set的通用实现很相似.

  此外LinkedHashMap不只提供了插入排序(insert order),同时还提供访问排序(access order),这样LinkedHashMap很是适用作本地缓存类(LRU)

  专用实现也有三个,分别是Enummap,WeakHashMap和IdentityHashMap.

  EnumMap是一个高性能的以枚举为键的Map集合,它内部是以数组实现.EnumMap将Map集合的丰富功能和安全性与数组的快速访问结合起来,若是想要实现一个用枚举映射值得结构,应当使用EnumMap.

  WeakHashMap只存储弱引用类型的key,当它内部的元素的键再也不被外界引用时,其键值对就能够被垃圾回收期(GC)回收,被从WeakHashMap中移除.WeakHashMap提供最简单利用弱引用的方法,这对实现”registry-like”数据结构很是有用.

  IdentityHashMap存储元素时,不使用equal方法比较键对象,而是使用==来对比,适用于实现对象拓扑结构转换,好比对象序列化或深度拷贝时,做为一个”节点表”来跟踪处理那些已经处理过的对象引用.

  Java.util.concurrent包含ConcurrentMap接口,它继承自Map,其putIfAbsent,remove,和replace方法是原子性的.ConcurrentHashMap是它的实现.

  ConcurrentHashMap是一个高并发高性能的基于哈希表的实现,当检索元素时永不会阻塞,而且当执行update容许客户端选定执行并发级别更新.它是HashMap的替代,ConcurrentHashMap除了实现ConcurrentMap还支持HashTable全部遗留的独有的操做.

相关文章
相关标签/搜索