Java HashMap實現原理

2021-09-20 03:55:25 字數 2255 閱讀 1821

連續記憶體位址

資料元素

ox0001

jack

ox0010

rose

ox0011

petter

ox0100

john

特點:

1、隨機訪問表中元素。

2、插入和刪除操作需要移動元素。

記憶體位址

資料元素

下個位址

ox0001

jack

ox0111

ox1010

rose

ox0100

ox0111

petter

ox1010

ox0100

john

null

特點

1、比順序儲存結構的儲存密度小 (每個節點都由資料域和指標域組成,所以相同空間內假設全存滿的話順序比鏈式儲存更多)。

2、邏輯上相鄰的節點物理上不必相鄰。

3、插入、刪除靈活 (不必移動節點,只要改變節點中的指標)。

4、查詢結點時鏈式儲存要比順序儲存慢。

5、每個結點是由資料域和指標域組成。

記憶體位址

資料元素

下個位址

ox0001

jack

ox0111

ox1010

rose

ox0100

ox0111

petter

ox1010

ox0100

john

null

位址順序索引

字母排序索引

ox0001 : jack

ox0001 :jack

ox0100 :john

ox0100 :john

ox0111 :petter

ox0111 :petter

ox1010 : rose

ox1010 : rose

4、雜湊儲存:雜湊儲存,又稱hash儲存,是一種力圖將資料元素的儲存位置與關鍵碼之間建立確定對應關係的查詢技術。

連續記憶體位址

資料元素

hashcode

ox0001

jack

1212434

ox0010

rose

122222434

ox0011

petter

1210034

ox0100

john

124

特點:雜湊是陣列儲存方式的一種發展,相比陣列,雜湊的資料訪問速度要高於陣列,因為可以依據儲存資料的部分內容找到資料在陣列中的儲存位置,進而能夠快速實現資料的訪問,理想的雜湊訪問速度是非常迅速的,而不像在陣列中的遍歷過程,採用儲存陣列中內容的部分元素作為對映函式的輸入,對映函式的輸出就是儲存資料的位置,這樣的訪問速度就省去了遍歷陣列的實現,因此時間複雜度可以認為為o(1),而陣列遍歷的時間複雜度為o(n)。
10(十進位制)=1010(二進位制)

10(十進位制)<<2=101000(二進位制)=40(十進位制)=10*(2的2次方)

10>>2=0010=2

-10=10的模數=10的補碼=10的反碼+1=0101+1=10110(一位符號位)

-10>>2=11101=11100+1=0011的反碼+1=3的反碼+1=3的補碼=3的模數=-3

10>>>2=0010=2

-10=10的模數=10的補碼=10的反碼+1=0101+1=10110(一位符號位)

-10>>>2=00101=5

因為計算機只能做加法,所以引進模這個東西,比如乙個負數與其正補數是一致的,so,計算機中負數就用補碼表示

陣列+鍊錶

陣列+鍊錶+紅黑樹

(鍊錶元素超過8個就轉紅黑樹)

併發的hashmap:concurrenthashmap

java HashMap 實現原理

hashmap 我們不陌生,他是允許存放null 物件的,他的結構其實就是乙個陣列,不過稍微複雜一點 把這個圖畫出來,起始就很好理解了,首先我們來看一下他的構造方法 constructs a new empty instance.suppresswarnings unchecked public h...

java Hashmap原理分析

size medium color red b 1.hashmap的資料結構 b color size 資料結構中有陣列和鍊錶來實現對資料的儲存,但這兩者基本上是兩個極端。b 陣列 b 陣列儲存區間是連續的,占用記憶體嚴重,故空間複雜的很大。但陣列的二分查詢時間複雜度小,為o 1 陣列的特點是 定址...

java HashMap 基本用法

hashmap可以用於儲存 鍵 值 對 這樣的資料,查詢 訪問時間開銷接近o 1 這裡列出最基本的用法備忘。新建 hashmapmap new hashmap 插入 map.put k k,v v 訪問 v v map.get k 示例 新建hashmapmap new hashmap 加入鍵值對m...