2013 9 24 HashMap原理研究

2021-06-18 11:57:41 字數 1176 閱讀 1398

hashmap :entry陣列+鍊錶

hashmap底層就是乙個陣列結構,陣列中的每一項又是乙個鍊錶。

當新建乙個hashmap的時候,就會初始化乙個陣列。

陣列的特點是:定址容易,插入和刪除困難;

而鍊錶的特點是:定址困難,插入和刪除容易。

那麼我們能不能綜合兩者的特性,做出一種定址容易,

插入刪除也容易的資料結構?

答案是肯定的,這就是我們要提起的雜湊表,

雜湊表有多種不同的實現方法,我接下來解釋的是最常用的一種方法—— 拉鍊法,

我們可以理解為「鍊錶的陣列」.

mapm = new hashmap();

m.put(1, 11);

m.put(2, 22);

m.put(2, 43);

system.out.println(m.get(1));

system.out.println(m.get(2));// 這裡為什麼是43而不是22,見下面的解釋

在put鍵值對時,如果兩個entry的key的hashcode值相等,那麼他們的儲存位置是相同的。這時會通過equals比較這兩個entry的key值,如果返回true,則新新增的entry物件的value值會覆蓋原來的value值,key值不會覆蓋;如果返回false,將會形成entry鍊錶,新新增的entry將會位於鏈的頭部。(故m.get(2)// 這裡為什麼是43而不是22,是因為key為2時,前後兩個entry物件的key的equals返回true,value值被覆蓋)

實現://新增資料

public v put(k key,v value) else

}/**

陣列中沒有這個key對應的資料,需要新新增乙個資料,並且自身指向自身*/

entrye = table[index];

table[index] = new entry(key, value, e);

return value;

}在get值時,先根據key去獲取entry物件陣列的下標值,如果只有乙個值,直接返回;如果是乙個多個值的

鍊錶,則會通過equals去比較兩個key值,返回true時,則返回此時的value值;返回false,則表示找不到

實現://獲取資料

public v get(k key)

}return null;

}

HashMap實現原理

hashmap 的get 方法 呼叫get方法返回entry public v get object key getentry方法 final entrygetentry object key 對key int hash key null 0 hash key for entrye table in...

HashMap底層原理

1.hashmap概述 hashmap是基於雜湊表的map介面的非同步實現。此實現提供所有可選的對映操作,並允許使用null值和null鍵。此類不保證對映的順序,特別是它不保證該順序恆久不變。2.hashmap的資料結構 注意,迭代器的快速失敗行為不能得到保證,一般來說,存在非同步的併發修改時,不可...

HashMap工作原理

以前使用過很多次hashmap,但是對於其是如何實現的卻不是很了解,最近看了看hashmap的原始碼加上自己的理解寫了這篇文章方便以後回憶,寫得不好的地方請提醒。hashmap繼承了abstractmap類並且實現了map cloneable serializable三個介面。ps 並不是每乙個集合...