Java之集合框架

一.hashmap
1.hashmap工作原理
HashMap是基於hashing的原理,我們使用put(key,
value)存儲對象到HashMap中,使用get(key)從HashMap中獲取對象。
當我們給put()方法傳遞鍵和值時,我們先對鍵調用hashCode()方法,返回的hashCode用於找到bucket位置來儲存Entry對象。
2.hashmap中get()方法的工作原理
首先根據對象的Hash值進行數組方面的尋找,然後找到這個數組之後,判斷key是不是唯一,如果key唯一,則直接返回,如果不唯一,則使用equals進行值的判斷,最後返回數據。
3.當兩個對象的hashcode相同會發生什麼?
因爲hashcode相同,所以它們的bucket位置相同,‘碰撞’會發生。因爲HashMap使用鏈表存儲對象,這個Entry(包含有鍵值對的Map.Entry對象)會存儲在鏈表中。這個時候要理解根據hashcode來劃分的數組,
如果數組的座標相同,則進入鏈表這個數據結構中了,jdk1.7及以前爲頭插法,jdk1.8之後是尾插法,在jdk1.8之後,當鏈表長度到達8的時候,jdk1.8上升爲紅黑樹,
4.如果兩個鍵的hashcode相同,你如何獲取值對象?
當我們調用get()方法,HashMap會使用鍵對象的hashcode找到bucket位置,然後獲取值對象,如果有兩個值對象儲存在同一個bucket,將會遍歷鏈表直到找到值對象。找到bucket位置之後,會調用keys.equals()方法去找到鏈表中正確的節點,最終找到要找的值對象。
5.如果HashMap的大小超過了負載因子(load factor)定義的容量,怎麼辦?
默認的負載因子大小爲0.75,也就是說,當一個map填滿了75%的bucket時候,和其它集合類(如ArrayList等)一樣,將會創建原來HashMap大小的兩倍的bucket數組,來重新調整map的大小,並將原來的對象放入新的bucket數組中。這個過程叫作rehashing,因爲它調用hash方法找到新的bucket位置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章