回覆列表
  • 1 # 嚄氿是愛分享呀ct

    1.底層資料結構不一樣,1.7是陣列+連結串列,1.8則是陣列+連結串列+紅黑樹結構(當連結串列長度大於8,轉為紅黑樹)。

    2.JDK1.8中resize()方法在表為空時,建立表;在表不為空時,擴容;而JDK1.7中resize()方法負責擴容,inflateTable()負責建立表。

    3.1.8中沒有區分鍵為null的情況,而1.7版本中對於鍵為null的情況呼叫putForNullKey()方法。但是兩個版本中如果鍵為null,那麼呼叫hash()方法得到的都將是0,所以鍵為null的元素都始終位於雜湊表table【0】中。

    4.當1.8中的桶中元素處於連結串列的情況,遍歷的同時最後如果沒有匹配的,直接將節點新增到連結串列尾部;而1.7在遍歷的同時沒有新增資料,而是另外呼叫了addEntry()方法,將節點新增到連結串列頭部。

    5.1.7中新增節點採用頭插法,1.8中新增節點採用尾插法。這也是為什麼1.8不容易出現環型連結串列的原因。

    6.1.7中是透過更改hashSeed值修改節點的hash值從而達到rehash時的連結串列分散,而1.8中鍵的hash值不會改變,rehash時根據(hash&oldCap)==0將連結串列分散。

    7. 1.8rehash時保證原連結串列的順序,而1.7中rehash時有可能改變連結串列的順序(頭插法導致)。

    8.在擴容的時候:1.7在插入資料之前擴容,而1.8插入資料成功之後擴容。

  • 中秋節和大豐收的關聯?
  • 求psp初音未來歌姬計劃擴充套件版的所有歌曲名字?