我正在迭代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
}
}
但是当tring检索键的值时,我得到一个空列表。此外multimap.containsKey(key)
返回false。
当我尝试使用entries()
进行迭代时,会找到键和值。
我正在使用guava-14.0.1.jar
,但我尝试使用旧版本,但我得到了同样的行为。
此外,有时候作为值存在空值,并且我已经为MyKey和MyValue重写了equals和hash方法。
知道是什么原因引起的吗?我确信这不是ArrayListMultimap
实施。
答案 0 :(得分:1)
MyKey
实际上是不可变的吗?
如果某个密钥在Multimap
(或HashMap
中使用后)更改后发生变更,并且变更效果为hashCode()
和equals()
,您将无法再找到关联的值:修改后的哈希码意味着查找不会发生在存储值的存储桶中。