前面介绍了CopyOnWriteArraySet,本来接着是打算介绍ConcurrentSkipListSet,无耐ConcurrentSkipListSet的内部实现其实是依赖一个ConcurrentSkipListMap实例实现的,所以必须先理解ConcurrentSkipListMap,因此我们不得不进入到Map家族。
Map概述
上图画出了Java并发包中关于Map的类结构图(Note: 绿色表示接口,蓝色表示实例类,黄色表示抽象类),并发包中只有4个与Map相关的类,其中两个接口:ConcurrentMap、ConcurrentNavigableMap,两个实例类:ConcurrentSkipListMap、ConcurrentHashMap。
java.util.SortedMap
SortedMap是一种可以根据键排序的Map,这种排序可以是自然排序,也可以按照指定的比较器排序,而这种顺序将反映在遍历迭代集合视图(由entrySet、keySet和values方法返回)时。插入SortedMap的键都必须是可比较的,并且所维护的顺序(无论是否显式提供比较器)必须与equals方法的结果一致。通常SortedMap的实现类都应该提供以下四个标准的构造方法:
①无参构造方法:创建一个按键的自然顺序排序的空SortedMap。②一个参数为Comparator类型的有参构造方法:创建一个根据指定的比较器排序的空SortedMap。
③一个参数为Map类型的有参构造方法:创建一个新的根据指定Map的键值初始化的自然排序的SortedMap。④一个参数为SortedMap类型的有参构造方法:创建一个新的根据指定SortedMap的键值和相同的排序规则初始化的SortedMap。
SortedMap还额外提供了一些返回具有受限键范围的子map视图方法,更改这些方法返回的子SortedMap将反映到原SortedMap,反之亦然。在返回的视图中插入超出其范围的键时将抛出IllegalArgumentException。SortedMap一些特殊的接口方法如下:
1 //返回用于该SortedMap中键排序的比较器,若是自然排序则返回null。 2 Comparator<? super K> comparator(); 3 4 //返回键在[fromKey, toKey)范围内的子视图,fromKey与toKey相等则返回空map。并且更改该子视图将反映到原map,反之亦然。在返回的视图中插入超出其范围的键时将抛出IllegalArgumentException。 5 SortedMap<K,V> subMap(K fromKey, K toKey); 6 7 //返回键小于toKey的子视图,其特性与subMap一致。 8 SortedMap<K,V> headMap(K toKey); 9 10 //返回键大于等于fromKey的子视图,其特性与subMap一致。 11 SortedMap<K,V> tailMap(K fromKey); 12 13 K firstKey();//返回当前map中的第一个(最小)键。 14 K lastKey();//返回当前map中的第后一个(最大)键。