HashMap中有兩段原始碼hash 和 indexFor
1.hash的原始碼是對key的hashcode進行擾動計算,主要是防止不同的hashcode的高位不同,但低位相同,導致hash沖突,做法是將key的hashcode與自身的高16位進行異或操作
2. indexFor計算可了key在陣列中的位置h&(length)
問題一:為何只與它的高16位異或,我知道HashMap的容量為2的冪次方,但上限為2的16次方是為何
問題二:既然擾動函式已經很大程度解決了hash沖突,為何在計算key在tab陣列中的位置時不直接用擾動后的hash值,還要再讓h和length-1與操作
主要問題是既然已經對key的hashcode進行擾動操作,使得其更加散列,為何在插入陣列時不直接用這個hash值,是因為還不夠散列嗎。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/141978.html
標籤:Java相關
上一篇:問下壇子里大佬,金融產品如何后臺建立任務Web架構?
下一篇:Java跨服務器檔案復制
