在我的程序中,我有一个HashMap。它具有字符串的HashSets作为其键,并且具有String的PriorityQueues作为其值。当我更改其键之一的内容时,它不再保留为HashMap的成员。这对我来说似乎很奇怪,因为我没有更改密钥的引用。我只是更改其内容。请查看以下代码段:
HashMap<HashSet<String>, PriorityQueue<String>> myHashMap=new HashMap<>();
HashSet<String> myHashSet=new HashSet<>();
myHashSet.add("abc");
myHashSet.add("mnq");
myHashSet.add("al;ksghl");
PriorityQueue<String> myPriorityQueue=new PriorityQueue<>();
myPriorityQueue.add("3h4");
myPriorityQueue.add("lskdjf");
myHashMap.put(myHashSet, myPriorityQueue);
if(myHashMap.containsKey(myHashSet))
System.out.println("Yes!");
myHashSet.remove("abc");
if(myHashMap.containsKey(myHashSet))
System.out.println("Yes!");
基本上,我希望看到两个“是!”,实际上,它只打印一个。我进行了彻底的调试,并意识到myHashSet的引用号在删除其中一个成员后不会更改。因此,该程序没有理由不打印第二个“是!”。
任何帮助都非常感谢。
最佳答案
Hashmap键取消了键的哈希值/等号(已指出,此值正在更改)。如果您关心身份,则应使用java.util.IdentityHashMap