1.線性鏈表->數組+鏈表 --------HashMap是數組結構、鏈表結構與Hash算法的結合。
如圖所示:

Hash算法中 Object.hashcode() 計算出Object的哈希碼值(int)
同一個對象 多次調用 hashcode()得到的結構都是相同的
兩個對象調用equals()方法結果為true 即比較結果相同,這兩個對象再調用hashcode()也一定相同。如果這個兩個對象調用equals()方法結果不相同的話,這兩個對象再調用hashcode()也不一定不相同。
HashMap 和HashTable的區別:
HashMap允許空值和空鍵;
HashTable不允許空value。源碼如圖:

而且是線程安全的,synchronized,下面這個是另外一個ConcurrentHashMap,hashtable是鎖整張表,而這個是鎖某個段。HashMap是線性非安全的,效率較線程安全的來時相對高。

ConcurrentHashMap 不允許空鍵值對


// 2.通過Hash算法計算要插入的值。
