Collection的子类有List和Set,Map 是独立的接口。
一、Map
1.HashMap
Hashmap 的数据结构是数组类型,每个数组的元素是一个链表,在jdk 8 中 链表长度超过8,链表会转化成红黑树以增强查找效率。HashMap不是线程安全的。LinkedhashMap 是HashMap的子类,可以用于构建LRUCache。
面试常见问题:HashMap 数据结构。
线程安全,为什么不安全,resize不安全原理。
put,get 过程。
2.ConcurrentMap
线程安全Map,jdk8 中优化了同步锁,使用了Cas锁,锁的粒度变小。
弱一致性:ConcurrentHashMap的迭代器创建后,就会按照哈希表结构遍历每个元素,但在遍历过程中,内部元素可能会发生变化,如果变化发生在已遍历过的部分,迭代器就不会反映出来,而如果变化发生在未遍历过的部分,迭代器就会发现并反映出来,这就是弱一致性。
3.TreeMap
线程安全Map,内部数据结构是红黑树,同步锁会整体锁。锁粒度较大。TreeMap 是有序的,插入的时候会进行比较。
二、Collection
1.List
ArrayList 内部使用数组,LinkedList 使用链表数据结构。二者对于不同场景效率不同,ArrayList 按下标查询效率高,LinkedList 随机插入效率较高。
2.Set
HashSet内部使用HashMap,不允许存在相同的值。
集合方面的类是java 基础,需要了解其实现原理,是否线程安全,不安全的场景。