HashMap 和HashTable的區別?底層實現是什么?


    HashMap 和HashTable的區別?底層實現是什么?

    

    區別:

    (1)HashMap方法沒有synchroized修飾,線程非安全,HashTable線程安全

    (2)HashMap允許key和value為null,而HashTable不允許

    

  2 底層實現:數組+鏈表實現

  jkd8開始鏈表高度到8,數組長度超過64,鏈表轉變為紅黑樹,元素以內部類Node節點存在

    1)計算key的hash值,二次hash然后對數組長度取模,對應到數組下標。  

    2)如果沒有產生hash沖突,則直接創建node存入數組

    3)如果產生hash沖突,先進行equal比較,相同則取代鈣元素,不同,則判斷鏈表高度插入鏈表,鏈表

    高度達到8,並且數組長度達到64則轉變為紅黑樹,長度低於6則將紅黑樹轉回鏈表。

    4)key為null,存在小標為0的位置。

 

 

 

    示例解釋:當創建一個hashMap,往里面存儲第一個在值時,計算出hash值,發現此節點並沒有值,

則可以直接放入,此時還是數組,然后不停放入值,但是當產生hash沖突的時候,比如下標是0的位置,兩個值

計算得到的hashcode都是指向這個位置,則使用equals判斷是否相同,相同則替代,不同則將此位置所存儲的hashcode相同的兩個值做成鏈表存儲到此位置,然后當此位置存儲的值超過8個,則查詢效率會低,所以轉化為紅黑樹,加快查詢速度。

    數組在長度滿的時候會自動擴容。加載因子是0.75。

    鏈表轉為紅黑樹的閾值是8。

 

 

 

 

 

 

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM