В моей программе у меня есть HashMap. Он имеет HashSets of Strings в качестве своих ключей и PriorityQueues of Strings в качестве своих значений. Когда я изменяю содержимое одного из его ключей, он больше не остается членом 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 не меняется после удаления одного из его членов. Поэтому у этой программы не должно быть причин не печатать второе «Да!».
Любая помощь очень ценится.