java hashmap原始碼學習二 put get

2021-08-14 22:29:55 字數 1567 閱讀 3420

hashmap裡面兩個最重要的方法就是getput

一、put(object key)方法的實現

public v put(k key, v value)
putval()的基本思路:

1.要是table為空,則建立新的table

2.要是table[(length-1)&hash(key)]為空,則建立新節點,否則(即原來有節點):

(1)如果key的hash值和這個節點的hash值相同,且key相同,則把這個節點的value改為新的值,key不變;

(2)如果該鏈為樹,呼叫puttreeval(),基本思想也應該是遍歷,遇到相同的就改變value, 要是沒相同key的節點就在樹後加新節點

(3)其他情況,也就是鏈為單鏈,然後table上的那個節點key不一樣,就遍歷單鏈,遇到相同的就改變value,沒有遇到就在鏈尾加新節點

final v putval(int hash, k key, v value, boolean onlyifabsent,boolean evict) 

if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k))))

break;

p = e;}}

if (e != null)

}++modcount;

if (++size > threshold)

resize();

afternodeinsertion(evict);

return

null;

}

二、get(object key)和containskey(object key)的實現

public v get(object key)

public boolean containskey(object key)

getnode()的基本思路:

(1)首先要保證table不為空,長度不為0並且table[(n-1)&hash]不為空,否則返回null

(2)首先檢查第乙個節點即table上的節點,如果hash值和key值都相等,就返回這個節點的value

(3)如果首節點不是要找的點,就往後遍歷直到找到hash值和key值都和要找的點相同的節點,如果後面是樹,則呼叫找查樹的方法。

node tab; nodefirst, e; int n; k k;

if((tab = table) != null && (n = tab.length) > 0 && (first = tab[(n-1) & hash]) != null)while((e = e.next) != null);}}

return null;

}

Java HashMap原始碼分析

hashset和hashmap是相同的實現 主要分析hashmap hashmap實現了map介面,允許放入null元素,與hashtable的主要區別是沒有實現執行緒安全,與treemap的主要區別是不能保證元素的順序,因此,不同時間迭代會得到不同的位置,hashmap是用衝突鍊錶法解決衝突 根據...

Java HashMap原始碼小結

本文基於jdk1.8.hashmap即雜湊表,是一種能以常數平均時間完成插入,刪除和查詢操作的資料結構 雜湊表有兩種實現方式 開放位址方式和衝突鍊錶方式 開放位址方式不需要使用鍊錶,但是要頻繁的再雜湊操作,常用的再雜湊方法有線性探測法,平方探測法,雙雜湊法。衝突鍊錶方式將所有雜湊值相同的鍵用鍊錶串起...

Java HashMap原始碼分析

在平時需要用到鍵值對儲存資料時,我們便會用到hashmap,這篇文章基於jdk1.8,參考前輩的文章,對hashmap進行一定的理解.面試必備 hashmap原始碼解析 jdk8 hashmap之比於arraylist和linkedlist,感覺原始碼複雜得多,由於才學疏淺,本文很大部分參考上面鏈結...