У меня есть карта, которая использует набор для типа ключа, например:
Map<Set<Thing>, Val> map;
Когда я запрашиваю map.containsKey(myBunchOfThings), он возвращает false, и я не понимаю, почему. Я могу перебирать каждую клавишу в наборе ключей и проверять, есть ли ключ, который (1) имеет тот же hashCode, и (2) равен() для myBunchOfThings.
System.out.println(map.containsKey(myBunchOfThings)); // false.
for (Set<Thing> k : map.keySet()) {
if (k.hashCode() == myBunchOfThings.hashCode() && k.equals(myBunchOfThings) {
System.out.println("Fail at life."); // it prints this.
}
}
Я просто принципиально неправильно понимаю контракт на containsKey? Есть ли секрет использования наборов (или, более общо, коллекций) в качестве ключей к картам?