HashMap深入理解

2021-08-21 11:52:13 字數 1421 閱讀 2011

hashmap是基於雜湊表的map介面的非同步實現。此實現提供所有可選的對映操作,並允許使用null值和null鍵。hashmap儲存的是鍵值對,hashmap很快。此類不保證對映的順序,特別是它不保證該順序恆久不變。

此實現假定雜湊函式將元素適當地分布在各桶之間,可以為基本操作(get和put)提供穩定的效能。迭代collection檢視所需的時間與hashmap例項的「容量」(桶的數量)及大小(鍵-值對映關係數)的和成正比。所以,如果迭代效能很重要,則不要將初始容量設定得太高(或將載入因子設定得太低),最大限度的降低rehash操作次數。

hashmap例項有兩個引數影響其效能:①初始容量  ②載入因子;

①初始容量----容量是雜湊表中桶的數量,初始容量是雜湊表在建立時的容量。

②載入因子----當前容量×載入因子=當前雜湊表中最多儲存的條目數。當雜湊表中的數量超出後,則要對該雜湊表進行rehash操作(重建內部資料結構,即擴容),擴容到2倍的桶數。

預設雜湊表為101,載入因子為0.75.

3.結構理解

hashmap實際上是乙個「鍊錶雜湊」的資料結構,即陣列和鍊錶的結合體。

陣列:儲存區間連續,占用記憶體嚴重,定址容易,插入刪除困難; 

鍊錶:儲存區間離散,占用記憶體比較寬鬆,定址困難,插入刪除容易; 

hashmap綜合應用了這兩種資料結構,實現了定址容易,插入刪除也容易。 

hashmap的結構示意圖如下: 

①put鍵值對

②get值方法的過程

1、指定key 通過hash函式得到key的hash值 

int hash=key.hashcode();

2、呼叫內部方法 getnode(),得到桶號(一般都為hash值對桶數求模) 

int index =hash%entry.length;

3、比較桶的內部元素是否與key相等,若都不相等,則沒有找到。相等,則取出相等記錄的value。

4、如果得到 key 所在的桶的頭結點恰好是紅黑樹節點,就呼叫紅黑樹節點的 gettreenode() 方法,否則就遍歷鍊錶節點。gettreenode 方法使通過呼叫樹形節點的 find()方法進行查詢。由於之前新增時已經保證這個樹是有序的,因此查詢時基本就是折半查詢,效率很高。

5、如果對比節點的雜湊值和要查詢的雜湊值相等,就會判斷 key 是否相等,相等就直接返回;不相等就從子樹中遞迴查詢。

hashmap中直接位址用hash函式生成;解決衝突,用比較函式解決。如果每個桶內部只有乙個元素,那麼查詢的時候只有一次比較。當許多桶內沒有值時,許多查詢就會更快了(指查不到的時候)。

深入理解hashmap的原理

一 什麼是雜湊?雜湊也叫雜湊,是將不同長度的輸入通過乙個函式轉換成同乙個長度輸出的過程,這個輸出的值叫雜湊值,這個轉換函式叫雜湊函式,雜湊函式所採用的演算法加雜湊演算法。實際上是乙個通過訊息得到訊息摘要的方法 二 什麼是雜湊表?雜湊表是乙個通過key訪問value的資料結構,它是基於乙個陣列,存資料...

HashMap內部原理深入理解

hashing 雜湊法 的概念 雜湊法 hashing 是一種將字元組成的字串轉換為固定長度 一般是更短長度 的數值或索引值的方法,稱為雜湊法,也叫雜湊法。由於通過更短的雜湊值比用原始值進行資料庫搜尋更快,這種方法一般用來在資料庫中建立索引並進行搜尋,同時還用在各種解密演算法中。hashmap概念和...

深入理解HashMap(五)remove方法解析

remove作為核心方法之一,也是我們需要掌握的重點,來看一下remove方法 可以看出,remove方法中呼叫了removenode方法,進去removenode方法 final node removenode int hash,object key,object value,boolean ma...