簡體   English   中英

在HashSet / HashMap內部更改對象的hashCode

[英]Altering hashCode of object inside of HashSet / HashMap

我是Java的新手,對以下事情感到困惑:我通常在設置其內容之前將對象添加到ArrayList 也就是說,

List<Bla> list = new ArrayList<>();
Bla bla = new Bla();
list.add(bla);
bla.setContent(); // content influences hashCode

這種方法效果很好。 我擔心這種方法與HashSetHashMap一起使用時是否會給我帶來麻煩。 內部哈希表在添加對象時設置。 如果在將對象添加到HashSetHashMap (及其hashCode更改)之后調用setContent()會發生什么?

添加/放入HashSetHashMap 之前,我應該完全設置(影響hashCode的)內容嗎? 通常建議在添加對象之前完成構建對象嗎?

非常感謝您的見解。

如果在將對象添加到HashSet或HashMap(及其hashCode更改)之后調用setContent()會發生什么?

災害。

在添加/放入HashSets或HashMaps之前,是否應該完全設置(影響hashCode的內容)? 通常建議在添加對象之前完成構建對象嗎?

是。

相關文檔行位於java.util.Set

注意:如果將可變對象用作集合元素,則必須格外小心。 如果對象的值更改為影響相等比較的方式,而該對象是集合中的元素,則不指定集合的​​行為。 此禁止的一種特殊情況是,不允許集合將自身包含為元素。

一般來說,這種錯誤會以元素在集合中“處於”和“不在”狀態中而表現出來,而不同的方法會產生分歧。 您可能會很幸運,並且您的元素似乎仍然存在於集合中,或者可能不會存在; 這可能是隨機發生的。

這是為什么大多數對象都是不可變的優良作法的眾多原因之一-構造后首先不可能完全修改。

暫無
暫無

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

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