![]() |
1
19
在映射中使用时不应更改键。这个
我知道这个问题,但直到现在才做过测试。我再详细解释一下:
后
因此,正如Java doc所说,密钥不应该被突变,否则行为是 未指定的 . 时期。 我想你的情况就是这样。 |
![]() |
2
7
您应该努力使用不可变类型作为
如果要将多个键值用作
如果确实必须使用集合或集合作为键,请首先使其不可变。(
使用集合作为键的另一个困难是它们可以按照不同的顺序构造。只有分类的集合才有很可能匹配。例如,如果使用顺序排序的
编辑 :我在下面的声明中得到了更正,从未使用SET作为KET。我刚刚阅读了AbstractHashSet中的一部分hashcode实现。它使用所有值的简单总和,因此不依赖于顺序。equals还检查一个集合是否包含另一个集合中的所有值。然而,Java中其他类型的集合仍然是正确的(ARARYLIST命令确实如此)。
如果你的收藏实际上是
|
![]() |
3
2
插入后是否修改了集合?如果是这样的话,很有可能这一组被分类到一个不同的桶里,而不是它正在寻找的那个。迭代时,它确实会找到您的集合,因为它看起来像整个映射。 我相信hashmap的合同规定你不能修改用作密钥的对象的hashcode, |
![]() |
4
0
在比较密钥时,是否传递确切的集合(要查找的集合)? |