Collection体系

1 java集合框架

Collection体系_第1张图片

2  集合之List和Set

Collection体系_第2张图片

3 Map

Collection体系_第3张图片

 

4   HashMap 、HashTable、ConccurentHashMap的区别

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

Collection体系_第4张图片

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

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

Collection体系_第5张图片

       

  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来实现。

Collection体系_第6张图片

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

Collection体系_第7张图片

    三者的区别

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

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

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

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

 

 

你可能感兴趣的:(Java底层知识,java)