HashSet HashMap 訪問值的過程

2021-08-20 14:27:39 字數 921 閱讀 4611

(1)hashset底層用的是hashmap來實現的

(2)這個hashmap的key就是放進hashset中的物件,value就是乙個object型別的物件

(3)當呼叫hashset的方法時,實際上是向hashmap中增加了乙個鍵值對,key就是set增加的那個物件,value是乙個object型別的物件

(1)hashmap底層採用陣列維護,陣列的型別的entry型別,entry物件有2個成員變數——key和value,對應的就是map的key和value

(2 )entry物件還有個entry型別的成員變數next,是用於2個物件的hashcode值一樣時,把乙個物件的引用掛在這個物件的成員變數上的

(1)當往乙個hashmap增加乙個鍵值對時,會先呼叫鍵這個物件的hashcode方法,來得到乙個hashcode值,然後根據這個值來計算出這個鍵值對所在的陣列下標

(2)判斷該下標陣列存的引用是否為null,如果是,直接把物件存到陣列裡,儲存結束;如果不是,轉(3)

(3)判斷已存在物件的key的equals方法,跟需要新增的物件的key對比,是否為true,如果是,覆蓋這個key所對應的value,儲存結束;如果不是,獲取到已存在物件的next成員變數的引用,轉(4)

(4)判斷這個next所指向的值是不是為空,如果不為空,重複(3)的過程;如果為空,則把next引用指向要增加的物件

(1)呼叫key的hashcode方法,根據返回值定位到map裡陣列對應的下標

(2)判斷這個陣列下標是不是指向了null,如果是,返回null;如果不是,轉(3)

(3)判斷這個引用對應物件的key值的equals方法,跟查詢的key值對比,判斷是否為true,如果是,返回這個物件的value值;如果不是,轉(4)

(4)判斷這個引用對應物件的next指的是不是null,如果是null,返回null;如果不是,取出這個next物件,重複(3)

HashSet HashMap 原始碼閱讀筆記

hashcode 與 equals 應一起重寫,在hashmap 會先呼叫hash key.hashcode 找到對應的entry陣列位置 一般初始是16,2 x,rehash後會翻倍 再在這個entry鍊錶上equals判斷是否存在相同元素。所以當重寫equals時沒保證hashcode出的值的一...

訪優酷評論

html page xlanguage c autoeventwireup true codefile default.aspx.cs inherits default 後台 using system using system.collections.generic using system.lin...

畫素巡訪 at ptr

當我們進行影像處理時,可能有操作是要查訪所有畫素,比如說我們想要改變一張影像的灰階值,讓所有的畫素值加20,這時我們就需掃過影像所有的畫素,這邊介紹opencv的at 和ptr 函式以及迭代器,來查訪mat所有畫素。at 可用來讀取和修改某個畫素值,通常用來對隨機位置的畫素進行讀寫,就效率考量,並不...