У меня есть HashSet Whare я буду хранить набор для объектов, и я хочу, чтобы найти конкретный объект, в данном случае, почему мне нужно сделать, чтобы переопределить хэш-код и составляет метод, который я читал снизу, напримерКогда мне нужен метод hashcode и equals?
public class Emp
{
private int age ;
public Emp(int age)
{
super();
this.age = age;
}
public int hashCode()
{
return age;
}
public boolean equals(Object obj)
{
boolean flag = false;
Emp emp = (Emp)obj;
if(emp.age == age)
flag = true;
return flag;
}
}
Они говорят я бы получил false для нижеприведенного запроса, если я не переопределяю метод hashcode и equals.
System.out.println("HashSet Size--->>>"+hs.size());
System.out.println("hs.contains(new Emp(25))--->>>"+hs.contains(new Emp(25)));
System.out.println("hs.remove(new Emp(24)--->>>"+hs.remove(new Emp(24));
System.out.println("Now HashSet Size--->>>"+hs.size());
меня запутать, как это связано с Hashcode и равна просто проверяя содержит (anyobject) и удалить (anyobject) в HashSet.
Может ли кто-нибудь объяснить мне приведенный выше сценарий?
Возможный дубликат: https://stackoverflow.com/questions/2265503/why-do-i-need-to-override-the-equals-and-hashcode-methods-in-java?rq=1 –
Вы спрашивая, почему вам нужно переопределить любой из них, или почему вам нужно переопределить их оба? Если последнее: http://stackoverflow.com/questions/2265503/why-do-i-need-to-override-the-equals-and-hashcode-methods-in-java – yshavit
Как контейнер должен знать, если он содержит что-то, если он не может определить, равны ли какие-либо две вещи или нет? Точно так же, как это должно знать, если все равно, если вы не говорите, как это сделать? – azurefrog