總述:通過一定的演算法,將key的hashcode轉換成陣列的index;將key,value,hash等資訊儲存在陣列對應的index位置上.
問題:1.某些key的hashcode相同
2.hashcode不同,但一定演算法後對映到陣列的index相同
這個就是常說的hashcode衝突問題.
1.hashmap涉及的資料結構
entry ;
//entry陣列:儲存hashmap元素的地方.
//entry
//1.封裝了key;value;
//2.本身是乙個單向鍊錶;包含hash值;next;指標;
static class entryimplements map.entry
....
}
2.儲存的過程:
通過hashcode得到index後.儲存的不僅僅是該元素的key,value,hash.還有指向下乙個entry的引用.如果出現了hashcode衝突問題.則新建乙個entry;將該entry的nex指標指向已存在的entry.
public v put(k key, v value)
}modcount++;
addentry(hash, k, value, i); //該位置還空;或者位置不空,但已有entry(hashcode衝突)
return null;
}
void addentry(int hash, k key, v value, int bucketindex)
3.取值的過程
還是hash-index-entry的過程.不是直接return該index上entry;而要檢查entry鏈上真正對應的那個
public v get(object key)
}
算個複習吧.沒看過的看看.筆試面試很常見. HashMap原始碼簡析
hashmap 基於map介面實現的,允許使用null值和null鍵,但資料無序的.劃重點 執行緒不安全.若是想獲取乙個執行緒安全的hashmap,可用下面方法 map map collections.synchronizedmap new hashmap hashmap的主幹是entry陣列,每乙...
Python之函式簡析 二
python之函式 本節重點理解一下map,reduce,filter,lambda,sorted函式的用法 map函式例項 usr bin env python coding utf8 time 2017 11 2 9 32 author hantong file func.py map函式,返回...
strtok函式簡析
官方的strtok函式,用來通過分隔字元 不支援字串,傳入的串中每個字元單獨當分隔符,如下例子組合的如123會處理1而23會被跳過 返回分隔的串的首位址 比如呼叫strtok abc123def 123456 返回值是指向abc的指標 下次要獲得 def 需要呼叫strtok null,123456...