Как осуществить хэш-код и равняется методу

Как я должен осуществить hashCode() и equals() для следующего класса на Яве?

class Emp 
{
  int empid ; // unique across all the departments 
  String name;
  String dept_name ;
  String code ; // unique for the department 
}
25
задан Vidya 25 January 2010 в 13:07
поделиться

4 ответа

в Eclipse правой мыши мыши -> Источник -> генерировать hashcode () и равен () дает это:

/* (non-Javadoc)
 * @see java.lang.Object#hashCode()
 */
@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + (code == null ? 0 : code.hashCode());
    return result;
}
/* (non-Javadoc)
 * @see java.lang.Object#equals(java.lang.Object)
 */
@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (!(obj instanceof Emp))
        return false;
    Emp other = (Emp) obj;
    return code == null ? other.code == null : code.equals(other.code);
}

Я выбрал код как уникальное поле

33
ответ дан 28 November 2019 в 21:28
поделиться

Если код уникален (то есть ваш бизнес ключ), лучше всего использовать код для равных и HASHCODE - это хорошая практика для отдельной бизнес-ключа (код) от идентификатора объекта (ID).

Вот приятное чтение: Hibernate Документация: равен и hashcode (действует не только для самого гибернации)

0
ответ дан 28 November 2019 в 21:28
поделиться

Какие когда-либо ценности, которые вы используете, равны, чтобы определить, являются ли двумя объектами одинаковыми, являются значениями, которые необходимо использовать для создания хэш-кода.

public boolean equals(Object o) {

    boolean result = false;

    if(o instanceof CategoryEnum) {

        CategoryEnum ce = (CategoryEnum) o;
        result = ce.toString().equals(name);

    }       
    return result;

}


public int hashCode()
{
  int hash = 6;
  hash += 32 * name.hashCode();
  return hash;
}   
-1
ответ дан 28 November 2019 в 21:28
поделиться

Изменение профиля для «Продолжить ошибки согласованности данных», не всегда будет работать. Очевидно, что это уменьшает или не обнаруживает ошибку, но вы не получите все правильные данные. Он пропустит строки, с помощью которых происходит ошибка, и, следовательно, вы не можете получить точные данные.

-121--3081067-

равен () и hashcode (), у них много разных мест. равны (), если мы не отменим его от объекта, он представляет, что две переменные указывают на одинаковый куча объекта?

public  Class Student(){
  private int id;
  private  name;
  public Student(int id,String name){
  this.name=name;
  this.id=id; 
}

public void main(String[] args){
  Student A=new Student(20,'Lily');
  Student B=new Student(20,'Lily');
  boolean flag=A.equals(B)//flag=flase;
/*
 *Although they attribute the same, but they are two different objects, they point to     different memory
 */


@Override
public boolean equals(Object obj) {


  if (obj == null) {
    return false;
  }
  if (this == obj) {
    return true;
  }

  if (this.getClass() != obj.getClass()) {
    return false;
  }
  Student s=(Student)obj;
  return new Integer(this.id).equals(new Integer(s.id))&&this.name.equals(s.name);
  }

/**
  *Sometimes even though we Override  the equals, but we still can not determine whether   the *two objects the same,
  *In the collection object, such as HashSet, this time we have to Override the hashoCode ()
  */

public int hashCode(){
  return id + name.hashCode() ;
}
-2
ответ дан 28 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: