HashSet與HashMap的關系:
(1)HashSet底層用的是HashMap來實現的
(2)這個HashMap的key就是放進HashSet中的對象,value就是一個Object類型的對象
(3)當調用HashSet的方法時,實際上是向HashMap中增加了一個鍵值對,key就是set增加的那個對象,value是一個Object類型的對象
HashMap數據格式解析
(1)HashMap底層采用數組維護,數組的類型的Entry類型,Entry對象有2個成員變量——key和value,對應的就是map的key和value
(2 )Entry對象還有個Entry類型的成員變量next,是用於2個對象的hashcode值一樣時,把一個對象的引用掛在這個對象的成員變量上的
HashMap存值過程(put方法)
(1)當往一個HashMap增加一個鍵值對時,會先調用鍵這個對象的hashcode方法,來得到一個hashcode值,然后根據這個值來計算出這個鍵值對所在的數組下標
(2)判斷該下標數組存的引用是否為null,如果是,直接把對象存到數組里,存儲結束;如果不是,轉(3)
(3)判斷已存在對象的key的equals方法,跟需要添加的對象的key對比,是否為true,如果是,覆蓋這個key所對應的value,存儲結束;如果不是,獲取到已存在對象的next成員變量的引用,轉(4)
(4)判斷這個next所指向的值是不是為空,如果不為空,重復(3)的過程;如果為空,則把next引用指向要增加的對象
HashMap取值過程(get方法)
(1)調用key的hashcode方法,根據返回值定位到map里數組對應的下標
(2)判斷這個數組下標是不是指向了null,如果是,返回null;如果不是,轉(3)
(3)判斷這個引用對應對象的key值的equals方法,跟查詢的key值對比,判斷是否為true,如果是,返回這個對象的value值;如果不是,轉(4)
(4)判斷這個引用對應對象的next指的是不是null,如果是null,返回null;如果不是,取出這個next對象,重復(3)