Collection和map

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 基础,需要了解其实现原理,是否线程安全,不安全的场景。

你可能感兴趣的:(Collection和map)