为什么首选使用不可变对象作为Set的元素?

时间:2016-05-19 23:02:03

标签: java dictionary collections set immutability

我读了here

  

不可变对象是好的Map键和设置元素,因为这些   通常在创建后不会更改。

1 个答案:

答案 0 :(得分:6)

由于这些集合依赖于散列,因此对hashCode贡献的字段应该是不可变的。

HashMap想要存储键值时,它会使用其key的hashCode并找出该对的位置,

相同的技术将用于元素检索(例如:contains,get等)。现在想象hashCode元素检索产生的值不同于添加元素时产生的值吗?我们能够正确找到元素吗?否。

HashSetHashMap没有区别。

所有关于使用hashCodeequals方法能够正确比较对象的方法,不变性使得更容易推断这些方法的正确性。