Collection体系

1 java集合框架

2  集合之List和Set

3 Map

 

4   HashMap 、HashTable、ConccurentHashMap的区别

         HashMap(java8之前):数组+ 链表

              性能恶化:从O(1)-O(n)  

    HashMap(java8之后):数组+ 链表+红黑树

       

  HashMap:Put方法的逻辑

          1.若HashMap未被初始化,则进行初始化操作。

          2 对Key求Hash值,依据Hash值计算下标。

          3 若未发生碰撞,直接放入桶中;

         4 若发生了碰撞,则以链表的方式来连接到后面

         5 若链表的长度超过阈值,且HashMap元素超过最低数化容量,则将链表转成红黑树。

        6 若节点已经存在,则用新值替换旧值。

        7 若桶满了(默认容量为16*扩容因子0.75),就需要resize(扩容2倍后重排)

HashTable:  

       1 早期java类库提供的哈希表的实现。

       2 线程安全:涉及到修改HashTable的方法,使用synchronized修饰。

       3  串行化的方式运行,性能较差。

ConccurentHashMap:

       早期的ConccurentHashMap通过分段锁Segment来实现。

         当前的ConccurentHashMap:CAS+synchronized使锁更加细化。

    三者的区别

       1 HashMap线程不安全,数组+ 链表+红黑树

       2 Hashtable 线程安全,锁住整个对象,数值+ 链表

      3 ConccurentHashMap 线程安全,CAS+同步锁,数组+链表+红黑树

      4 hashMap的key、value均可为null,其他的两个类不支持。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值