我读了here:
不可变对象是好的Map键和设置元素,因为这些 通常在创建后不会更改。
答案 0 :(得分:6)
由于这些集合依赖于散列,因此对hashCode
贡献的字段应该是不可变的。
当HashMap
想要存储键值时,它会使用其key
的hashCode并找出该对的位置,
相同的技术将用于元素检索(例如:contains,get等)。现在想象hashCode
元素检索产生的值不同于添加元素时产生的值吗?我们能够正确找到元素吗?否。
HashSet
与HashMap
没有区别。
所有关于使用hashCode
和equals
方法能够正确比较对象的方法,不变性使得更容易推断这些方法的正确性。