Это класс, который мы будем использовать для добавления в hasmap. Он преодолел и методы equals()
, и hashcode()
.Работа hashcode() и equals() в java?
class Dog
{
public String name;
public Dog(String n)
{
name=n;
}
@Override
public int hashCode() {
System.out.println("in hashcode");
return name.length();
}
@Override
public boolean equals(Object obj) {
System.out.println("in equals");
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Dog other = (Dog) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
Этот код в главном
Map<Object,Object> m=new HashMap<Object,Object>();
Dog d1=new Dog("clover");
m.put(d1,"Dog Key");
System.out.println(m.get(d1));
производит
in hashcode
in hashcode
Dog Key
, но следующий код
Map<Object,Object> m=new HashMap<Object,Object>();
Dog d1=new Dog("clover");
m.put(d1,"Dog Key");
System.out.println(m.get(new Dog("clover")));
производит
in hashcode
in hashcode
in equals
Dog Key
Как вы можете видеть, есть вызов метода equals()
во втором выходе. Почему это так?
Мой второй вопрос
Если изменить имя атрибута ключа Map м = новый HashMap();
Dog d1=new Dog("clover");
m.put(d1,"Dog Key");
d1.name="arthur";
System.out.println(m.get(new Dog("clover")));
о/р
in hashcode
in hashcode
in equals
null
, даже если я изменил значение ключа, но я пытаюсь получить значение, давая одинаковый ключ. Тогда почему он возвращает нуль?
Этот ответ уже завершен. Я хотел бы добавить некоторую общую информацию о том, как работает hashmap http://javarevisited.blogspot.ch/2011/02/how-hashmap-works-in-java.html – blackbird014