簡體   English   中英

HashSet 和 HashMap 在 Java 中是如何工作的?

[英]How do HashSet and HashMap work in Java?

我對java中HashSetHashMap的內部實現有點困惑。

這是我的理解,如有錯誤請指正:

HashSetHashMap不允許重復元素。

HashSetHashMap支持,因此在HashSet當我們調用.add(element) ,我們正在調用.add(element)hashCode()方法,並在內部對內部HashMap執行put(k,v) ,其中鍵是hashCode和值是實際對象。 因此,如果我們嘗試將相同的對象添加到Set ,它會看到hashCode已經存在,然后用新值替換舊值。

但后來,這個時候我讀了如何在我看來,不一致的HashMap存儲自己的對象作為一個鍵時,工作HashMap 在這種情況下,我們必須重寫hashCode()equals()方法並使它們彼此一致,因為,如果我們找到具有相同hashCode鍵,它們將進入同一個桶,然后區分所有條目使用相同的hashCode我們必須遍歷條目列表以在每個鍵上調用方法equals()並找到匹配項。 因此,在這種情況下,我們允許使用相同的hashCode並創建一個包含具有相同hashCode所有對象的列表的存儲桶,但是使用HashSet ,如果我們發現已經是hashCode ,我們將舊值替換為新值.

我有點困惑,有人可以向我澄清一下嗎?

你對HashMap的行為是正確的,但你對HashSet的實現是錯誤的。

HashSet在內部由HashMap支持,但您添加到HashSet的元素用作支持HashMap的鍵。 對於該值,使用虛擬值。 因此HashSetcontains(element)只是調用支持HashMapcontainsKey(element)

我們在 HashMap 中插入的值充當映射對象的鍵,對於它的值,java 使用一個常量變量。因此在鍵值對中,所有都具有相同的值

你可以參考這個鏈接https://www.geeksforgeeks.org/hashset-in-java/

Hash Map:-基本上是作為鍵和值工作的Hash映射,如果我們想將數據存儲為鍵和值對,那么我們將轉到哈希映射,基本上當我們基本上在內部使用哈希映射插入數據時,它會遵循3個想法, 1.hashcode 2..equale 3.==

當我們在哈希映射中插入數據時,它將使用哈希碼將數據存儲在存儲桶中(快速輸入),如果同一個存儲桶中有 2 個數據存儲,那么將發生鍵沖突來解決我們使用的鍵沖突(==)方法,總是 == 方法檢查對象的引用,如果兩個對象的哈希碼相同,則第一個替換為第二個,如果哈希碼不相同,則將發生哈希沖突來解決此哈希沖突,我們將使用 (.equal) 方法.equal 方法基本上它會檢查內容,如果兩個內容相同,那么它將返回 true 否則它將返回 false,因此在哈希映射中它將檢查內容是否相同? 如果內容相同,則第一個替換為第二個,如果兩個內容不同,它將在 bocket 中創建另一個對象並存儲數據

哈希集:- 基本上哈希集用於一次存儲一堆對象,內部哈希集也僅使用哈希映射,當我們通過在內部使用 add 方法插入某個想法時,它將調用 put 方法並將數據存儲在哈希映射鍵中bcz 哈希映射鍵總是唯一的並且不允許重復,這樣 hashset 也是唯一的和重復的也是不允許的,如果我們也在 hashst 中輸入重復,它不會通過任何異常第一個將替換為第二個,並在它將存儲的值中常量數據“PRESENT”。

您可以觀察到內部 hashmap 對象包含 hashset 的元素作為鍵和常量“PRESENT”作為它們的值。 其中present是常量,定義為private static final Object present = new Object()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM