Я распечатываю поиск ключа и ключи на карте, и они есть, но назначение не выполняется. Я тестирую, заполняя карту одним объектом и повторяя и распечатывая ключи. Ключ, на который я ссылаюсь, есть, поэтому я не вижу, как temp имеет значение null?Почему ключ не найден в hashmap?
Birds temp = (Birds)hint.get(input.substring(0, input.length()-1).trim());//the last char is being dropped off on purpose
if(temp == null)
{
System.out.println("failed to map key");
Iterator entries = hint.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry thisEntry = (Map.Entry) entries.next();
System.out.println("Key1: "+
thisEntry.getKey()); //this an next line printout the same
System.out.println("key2: "+
input.substring(0, input.length()-1).trim());
}
}
Я добавил следующие строки в классе птиц, но по-прежнему та же проблема
@Override public int hashCode()
{
return name.hashCode();
}
@Override
public boolean equals(Object obj) {
Bird b = (Bird)obj;
String str = b.name;
if(str.compareTo(this.name) == 0)
return true;
else
return false;
}
Оказался белое пространство завинчивания вещи, и я не звала trim()
достаточно часто.
Вы определили свой метод .hashCode() и .equals() для птиц? – JustinKSU
Ключи кажутся строками, а .hashCode() и .equals() не имеют значения для значений. –
@JustinKSU Nope !! Что это? Я последовал за этим (http://www.tutorialspoint.com/java/util/hashmap_get.htm). – Celeritas