ConCurrentHashMap 底层实现

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:线程同步

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值