У меня есть POJO, в котором я определил метод Hashcode себя, который ..правильная реализация хэш-код()
public int hashCode()
{
return name.hashCode()+job.hashCode()+salary;
}
Но так как я использую Eclipse IDE, он также обеспечит мой автоматически сгенерированный хэш-код, который есть ..
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((job == null) ? 0 : job.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + salary;
return result;
}
Теперь мой вопрос в том, что какая differnce между ними, что один implemenatation лучше ..! Мой полный POJO является ...
enter codepackage CollectionsPrac;
общественного класса Employee {
String name,job;
int salary;
public Employee(String n , String j, int t)
{
this.name= n;
this.job=j;
this.salary= t;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((job == null) ? 0 : job.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + salary;
return result;
}
/*@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Employee other = (Employee) obj;
if (job == null) {
if (other.job != null)
return false;
} else if (!job.equals(other.job))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (salary != other.salary)
return false;
return true;
}
*/
/* @Override
public int hashCode()
{
return name.hashCode()+job.hashCode()+salary;
}*/
@Override
public boolean equals(Object obj) {
if (this == obj)
{
return true;
}
// make sure o can be cast to this class
if (obj == null || obj.getClass() != getClass())
{
// cannot cast
return false;
}
Employee e = (Employee) obj;
return this.name.equals(e.name)&&this.job.equals(e.job)&&this.salary==e.salary;
}
@Override
public String toString() {
return name+"\t" +"\t"+ job +"\t"+ salary;
}
} здесь
Привет, пожалуйста, скажите мне, что случилось с моим исполнением hashcode() ..! 1 – Neera
Ваша версия генерирует гораздо больше (плохих) хэш-коллизий, чем версия Eclipse. –
@ user1334074: см. Мое обновление. В принципе, желательно, чтобы 'hashCode()' возвращал разные результаты для немного разных объектов. –