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

HashSet:

底层是用hashmap实现的,value就是map的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和自旋锁来保证线程安全,红黑树保证效率

你可能感兴趣的:(简述java常用集合的数据结构)