谷歌ArrayListMultimap

时间:2013-06-24 10:24:08

标签: java guava

我正在迭代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实施。

1 个答案:

答案 0 :(得分:1)

MyKey实际上是不可变的吗?

如果某个密钥在Multimap(或HashMap中使用后)更改后发生变更,并且变更效果为hashCode()equals(),您将无法再找到关联的值:修改后的哈希码意味着查找不会发生在存储值的存储桶中。