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 並不是每乙個集合...