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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容