在HashBiMap中改变值是否安全?

时间:2013-08-24 16:38:24

标签: java guava hashcode bimap

在我的代码中,我想要一个

HashBiMap<T1, HashSet<T2>> bimap;

在bimap中改变值是否可以?当我使用bimap.inverse()时,它是否会导致与包含可变密钥的HashMap相关的hashCode()相关问题?

1 个答案:

答案 0 :(得分:6)

最终会遇到与通常在基于哈希的地图中用作关键字的对象时通常会遇到的问题完全相同的问题,这很容易证明:

import java.util.*;
import com.google.common.collect.*;

public class Test {
    public static void main(String[] args) {
        HashBiMap<String, HashSet<String>> bimap = HashBiMap.create();
        HashSet<String> set = new HashSet<>();
        bimap.put("foo", set);
        System.out.println(bimap.inverse().get(set)); // foo
        set.add("bar");
        System.out.println(bimap.inverse().get(set)); // null 
    }
}

所以不,这样做是不安全的。理想情况下,您应该使用不可变类型作为完全防止这种情况发生的关键,而不是在改变相关对象时要小心。