简述java常用集合的数据结构

HashSet:

底层是用hashmap实现的,value就是map<k,v>的key,value是static final对象。

TreeSet:

底层采用的是红黑树,实现有序化。

ArrayList:

底层采用数组,当数据超过数组容量,将会新建一个1.5倍长度的新数组,然后再将原数组的数据克隆过去,擅长查询,拙于修改。

Linkedlist

底层采用双向链表,擅长修改,拙于查询。

HashMap

在jdk1.7以前,是entity数组和链表的组合,先获取key的hashcode确定对应的数组下标,当如果已经有对象,则遍历对比是否有相同的,有就替代,没有就放链表末尾。但由于链表仍然可能存在过长的情况,这会提高hashmap的时间复杂度,所以jdk1.7以后,在数组长度大于64,链表长度大于8时,会转化为红黑树,降低原链表查询的时间复杂度。

ConcurrentHashMap

以前是通过两次hash算法,第一层是statement数组(每个Segment包含多个entity),第二层是entity数组,采用分段锁基数,对每个statement都拥有一个锁,实现线程安全。在JDK1.8以后,采用synchronized和cas和自旋锁来保证线程安全,红黑树保证效率

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容