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和自旋锁来保证线程安全,红黑树保证效率