您好我有這樣一類叫做記憶以下一個HashSet:在一個HashSet返回一個對象在Java中
Set<Idea> ideas = new HashSet<Idea>();
通用型「理念」是另一個類我寫的有hashCode()方法和equals ()重寫。 我希望能夠在HashSet想法中獲得(而不是移除)Idea對象,然後通過向其添加某些內容來更改它,可能會更改它的hashcode()返回值。我聽說這是行不通的,但沒有人解釋爲什麼。我想知道是否有人能告訴我如何最有效地做到這一點。
您好我有這樣一類叫做記憶以下一個HashSet:在一個HashSet返回一個對象在Java中
Set<Idea> ideas = new HashSet<Idea>();
通用型「理念」是另一個類我寫的有hashCode()方法和equals ()重寫。 我希望能夠在HashSet想法中獲得(而不是移除)Idea對象,然後通過向其添加某些內容來更改它,可能會更改它的hashcode()返回值。我聽說這是行不通的,但沒有人解釋爲什麼。我想知道是否有人能告訴我如何最有效地做到這一點。
如果你想要執行查找,你應該使用一個Map。如果你想改變這個鍵(或者一個Set的元素),你必須先刪除它並重新添加它。出於這個原因,你的鑰匙應該只有不可變的字段。
HashSet在內部使用HasMap,其值與key相同。爲了將對象放置到Hashset中,jvm fill首先計算對象的哈希碼,並根據該哈希碼選擇相應的桶並放置對象。如果您是在將對象放入哈希集之後更改哈希碼,您將無法正確地獲取其位置。因此,如果您確實想要移除該元素,則最好從哈希集中移除該對象,然後將其更改並重新放回
HashSet = HashMap 你可以從jdk源看到這個 –
farmer1992
我不明白,會用一個HashMap來解決我的問題。如果是這樣,怎麼樣?謝謝! –
@ farmer1992他想要一套不是地圖 – OscarRyz