参考https://www.cnblogs.com/CarpenterLee/p/5545987.html
思想:从接口出发掌握集合
1.注意集合的“接口”框架图,熟记,并扫盲SortSet和NavigableSet等这种接口。
框架图:
来源:http://www.cnblogs.com/CarpenterLee/p/5414253.html
2.熟记常见实现类,他们实现的接口,以及异同
Map: hashMap, LinkedHashMap,TreeMap,IdentityHashMap,weakHashMap
A) identityHashMap:https://segmentfault.com/q/1010000002779228
-
简单说IdentityHashMap与常用的HashMap的区别是:前者比较key时是“引用相等”而后者是“对象相等”,即对于k1和k2,当k1==k2时,IdentityHashMap认为两个key相等,而HashMap只有在k1.equals(k2) == true 时才会认为两个key相等。IdentityHashMap 允许使用null作为key和value. 不保证任何Key-value对的之间的顺序, 更不能保证他们的顺序随时间的推移不会发生变化.
-
IdentityHashMap有其特殊用途,比如序列化或者深度复制。或者记录对象代理。
-
举个例子,jvm中的所有对象都是独一无二的,哪怕两个对象是同一个class的对象,而且两个对象的数据完全相同,对于jvm来说,他们也是完全不同的,如果要用一个map来记录这样jvm中的对象,你就需要用IdentityHashMap,而不能使用其他Map实现。
B)
HashMap不保证顺序。TreeMap实现了 SortMap,保证按照元素的升序。LinkedHashMap使用链表, 在HashMap的基础上保证了插入顺序。
HashSet,TreeSet,同理。没有LinkedTreeSet,要用Collections.newSetFromMap(new LinkedHashMap<>()) 包装实现
C)NavigableMap:TreeMap实现了该接口。TreeSet同理(NavigableSet)
NavigableMap除了继承SortedMap的特性外,它的提供的功能可以分为4类:
第1类,提供操作键-值对的方法。
lowerEntry、floorEntry、ceilingEntry 和 higherEntry 方法,它们分别返回与小于、小于等于、大于等于、大于给定键的键关联的 Map.Entry 对象。
firstEntry、pollFirstEntry、lastEntry 和 pollLastEntry 方法,它们返回和/或移除最小和最大的映射关系(如果存在),否则返回 null。
第2类,提供操作键的方法。这个和第1类比较类似
lowerKey、floorKey、ceilingKey 和 higherKey 方法,它们分别返回与小于、小于等于、大于等于、大于给定键的键。
第3类,获取键集。
navigableKeySet、descendingKeySet分别获取正序/反序的键集。
第4类,获取键-值对的子集。
详见:https://my.oschina.net/kevinair/blog/191242
Queue: PriorityQueue, ArrayDeque, LinkedList(其实更直接的实现了Deque)以及7种BlockingQueue
3.Collection实现了Iteratable,所以所有集合都可以通过iterator遍历
集合大多数实现了,Cloneable和Serializable
4.并发容器,
List: CopyOnWriteArrayList (实现了LIst)
Set: CopyOnWriteArraySet (实现了Set, 注意:未实现Cloneable)
ConcurrentSkipListSet (实现了NavigableSe)
Queue: 7种BlockingQueue
Map: ConcurrentHashMap(实现了ConcurrentMap)
ConcurretnSkipListMap(实现了ConcurretnNavigableMap)