如何避免意外的Hash-Key操作

时间:2015-03-14 10:02:48

标签: java hash

我注意到向列表添加元素会改变其哈希键值,因此无法再次访问它,因为.contains(modifiedObject)不会在此处发生冲突。我没想到这种行为是诚实的。让我想知道HashSet是如何进行哈希的。所以我怎样才能确保在我修改时

HashSet

2 个答案:

答案 0 :(得分:2)

一种方法是在UnmodifiableList<String>中使用List<String>代替HashSet

另一种选择是使用HashMap<String,List<String>>代替HashSet<List<String>>,前提是您可以将一些独特的String密钥与每个List相关联。

答案 1 :(得分:2)

永远不要将可变对象用作地图中的键或设置

如果您想阻止意外修改,请实施一个无法再修改的冻结类型

  • 精细打印:如果对象没有更改密钥,那么在技术上可以拥有对象的可变属性,但是您无法通过java集中的密钥轻松访问它们,因为没有HashSet.get来获取当前成员,只有contains。而且,它的风格很差,很脆弱。将这些对象拆分为key,value会好得多。