Я пытаюсь создать пользовательские объекты для HashMap
и написал код для методов hashcode
и equals
. При добавлении объектов в HashMap
метод equals
имеет значение true, а hashcode
возвращает одно и то же значение для обоих объектов, а HashMap
добавляет оба объекта как разные объекты. Как это может быть возможным? Ниже мой код:
class B {
String name;
int id;
public B(String name, int id)
{
this.name=name;
this.id=id;
}
public boolean equals(B b){
if(this==b)
return true;
if(b==null)
return false;
if(this.name.equals(b.name) && this.id==b.id)
return true;
else
return false;
}
public int hashcode(){
return this.id;
}
public String toString(){
return "name: "+name+" id: "+id;
}
}
Для тестирования вышеприведенного кода я добавил в свой основной класс следующее:
HashMap<B,String> sample=new HashMap<>();
B b1 = new B("Volga",1);
B b2 = new B("Volga",1);
System.out.println(b1.equals(b2));
System.out.println(b1.hashcode()+" "+b2.hashcode());
sample.put(b1, "wrog");
sample.put(b2,"wrog");
System.out.println(sample);
Это производит следующий вывод:
true
1 1
{name: Volga id: 1=wrog, name: Volga id: 1=wrog}
Может кто-нибудь объяснить, почему это происходит?
@Override
к методу, который должен переопределять или реализовывать метод. Мало того, что это документирует это, но если вы сделаете только что сделанную ошибку, компилятор откажется компилировать. - person JB Nizet   schedule 17.08.2018hashcode
. Должно бытьhashCode
с большой буквыC
... - person Shanu Gupta   schedule 17.08.2018