首先我們從put方法說起:
public v put
(k key, v value)
繼續往下看putval方法:
final v putval
(int hash, k key, v value,
boolean onlyifabsent,
boolean evict)
//如果key已經存在, e = 存在的值
if(e.hash == hash &&
((k = e.key)
== key ||
(key != null && key.
equals
(k))))
break
; p = e;}}
//e != null,說明存在相同的key
if(e != null)
}++modcount;
//資料超過一定的數量 擴容if(
++size > threshold)
resize()
;afternodeinsertion
(evict)
;return null;
}
首先看看
public v get
(object key)
然後我們再看
final node
getnode
(int hash, object key)
while
((e = e.next)
!= null);}
}return null;
}
原始碼分析 HashMap原始碼再讀 基於Java8
最近工作不是太忙,準備再讀讀一些原始碼,想來想去,還是先從jdk的原始碼讀起吧,畢竟很久不去讀了,很多東西都生疏了。當然,還是先從炙手可熱的hashmap,每次讀都會有一些收穫。當然,jdk8對hashmap有一次優化 我們首先看到的,應該是它的一些基本引數,這對於我們了解hashmap有一定的作用...
HashMap原始碼解析
以jdk1.8為例,hashmap是乙個用於儲存key value鍵值對的集合,每乙個鍵值對是乙個node jdk1.7叫做entry 後台是用乙個node陣列來存放資料,這個node陣列就是hashmap的主幹。這裡我們主要來分析hashmap的get和put方法。public v put k k...
hashMap 原始碼解析
這幾天跳槽 被人問得最多的問題就是基礎方面的知識.當時學習的時候有點囫圇吞棗.現在回頭把這些基本的集合類原始碼都仔細閱讀下 hashmap 用的是最頻繁的.所以問得也最多了.initcapacity 初始化的容量 loadfacotr 負載因子 主要用來計算threshold的值 threshold...