-1

我正在迭代这样的元素ArrayListMultimap

for(MyKey key : multimap.keySet()) {
    List<MyValue> values = multimap.get(key);
    // multimap.containsKey(key) returns false
    for(MyValue val : values) {
        // sometimes the list is empty
    }
}

但是当我试图检索一个键的值时,我得到一个空列表。也multimap.containsKey(key)返回假。当我尝试使用 迭代时entries(),会找到键和值。

我正在使用guava-14.0.1.jar,但我尝试了旧版本并且得到了相同的行为。此外,有时会有空值作为值,我已经覆盖了 MyKey 和 MyValue 的 equals 和 hash 方法。

知道是什么原因造成的吗?我确定这不是ArrayListMultimap实施。

4

1 回答 1

1

MyKey实际上是不可变的吗?

如果一个键在被用于Multimap(或 a HashMap,就此而言)之后发生更改,并且更改影响hashCode()and equals(),您将无法再找到关联的值:修改后的哈希码意味着查找不会发生在存储值的存储桶。

于 2013-06-28T21:01:22.280 回答