1、concurrenthashmap 并发安全的集合
1.7、1.8比较
1、取消了segment分段锁设计
2、将原本的数组+单向链表 改为 数组+单向链表+红黑树(数组+红黑树)
链表长度>8 数组长度>64的时候,会将链表转变为红黑树
初始化table:
put方法中,通过自旋 ,通过cas原理判断线程抢到初始化权限
一、集合
集合包括2大块:java.util包下的非线程安全集合和java.util.concurrent下的线程安全集合
List、Set(接口)集合继承collection接口
ArrayList、LinkedList(类)集合实现List(接口)集合
ArrayList集合(类):初始容量为10,底层实现object[]数组,线程不同步
LinkedList集合(类):初始容量为10,扩容因子为0.75,底层实现双链表,线程不同步
Vector集合(类):线程同步,可以动态扩容
HashSet、TreeSet集合实现Set接口
HashSet集合:初始容量为16,扩容因子为0.75,底层实现哈希表(实际为HashMap实例),线程不同步
TreeSet集合:初始容量为16,扩容因子为0.75,底层实现二叉树,有序,线程不同步
HashMap、TreeMap(类)集合实现了Map接口
HashMap集合(类):底层实现为hash表,无序,线程不同步
-
HashMap的一个实例有两个影响其性能的参数: 初始容量和负载因子 。 容量是哈希表中的桶数,初始容量只是创建哈希表时的容量。 负载因子是在容量自动增加之前允许哈希表得到满足的度量。 当在散列表中的条目的数量超过了负载因数和电流容量的乘积,哈希表被重新散列 (即,内部数据结构被重建),使得哈希表具有桶的大约两倍。
存储结构:数组+链表+红黑树
TreeMap集合(类):底层实现是二叉树,可以根据key进行有序(一般key的类型实实现了Comparable、Comparator接口),线程不同步
LinkedHashMap(类):底层实现是哈希表和链表实现
HashTable:底层实现是哈希表,线程同步,put方法有synchroize同步关键字
currentHashMap:线程同步