HashMap 1.7和1.8的區別

  • 底層數據結構不一樣,1.7是數組+鏈表,1.8則是數組+鏈表+紅黑樹結構(當鏈表長度大於8,轉爲紅黑樹)。
  • JDK1.7用的是頭插法,而JDK1.8及之後使用的都是尾插法,那麼他們爲什麼要這樣做呢?因爲JDK1.7是用單鏈表進行的縱向延伸,當採用頭插法時會容易出現逆序且環形鏈表死循環問題。但是在JDK1.8之後是因爲加入了紅黑樹使用尾插法,能夠避免出現逆序且鏈表死循環的問題。
  • 擴容後數據存儲位置的計算方式也不一樣:在JDK1.7的時候是直接用hash值和需要擴容的二進制數進行&;而在JDK1.8的時候直接用了JDK1.7的時候計算的規律,也就是擴容前的原始位置+擴容的大小值=JDK1.8的計算方式,而不再是JDK1.7的那種異或的方法。
  • 在擴容的時候:1.7在插入數據之前擴容,而1.8插入數據成功之後擴容。
  • JDK1.8中resize()方法在表爲空時,創建表;在表不爲空時,擴容;而JDK1.7中resize()方法負責擴容,inflateTable()負責創建表。
    參考文章:
    https://blog.csdn.net/qq_36520235/article/details/82417949
    https://blog.csdn.net/h1458280799/article/details/85265135
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章