equals () 를 다시 쓸 때hashCode () 를 다시 써야 합니다.
그럼 왜 해시코드()를 다시 쓰는 거죠?주로hash표에 중복된 대상이 들어가지 않도록 하여 성능을 높이기 위한 것이다.그런데 왜 해시코드()를 다시 쓰면 이 정도는 할 수 있는 거죠?다음은 코드로 분석합니다.
<strong> /**Strudent equals hashCode, 。
hashCode() :0 。
*/
public class Student {
public Student(String no) {
this.no = no;
}
// 0
@Override
public int hashCode() {
System.out.println("call hashcode");
return 0;
}
// equals
@Override
public boolean equals(Object obj) {
System.out.println("call equals");
if (this == obj)
return true;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (no == null) {
if (other.no != null)
return false;
} else if (!no.equals(other.no))
return false;
return true;
}
// ,
private String no;
private String name;
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
</strong>
<strong> public class Main {
public static void main(String[] args) {
Set<Student> set = new HashSet<Student>();
set.add(new Student("1"));
System.out.println("----------");
set.add(new Student("2"));
System.out.println("----------");
set.add(new Student("3"));
System.out.println("----------");
System.out.println(set.size());
}
} </strong>
출력 결과를 살펴보겠습니다.
<strong> call hashcode
----------
call hashcode
call equals
----------
call hashcode
call equals
call equals
----------
3 </strong>
보이시나요?허허, 매번 Set에 add(object)를 넣을 때마다hashCode()를 호출하고hash코드가 set 안의 어떤object의hash코드와 같지 않으면 set에 직접 넣는다.그렇지 않으면 equals(object)를 호출합니다. set의 어떤 object와 같을 경우 (즉hashCode와 같고 equals가true로 되돌아올 경우) set를 넣지 않고 set을 넣지 않으면 set을 넣습니다.
<strong> // hashCode。
@Override
public int hashCode() {
System.out.println("call hashcode");
return no.hashCode();
}
</strong>
다시 한 번 실행하면 결과는 다음과 같습니다.
<strong> call hashcode
----------
call hashcode
----------
call hashcode
----------
3 </strong>
즉, 학호가 다르고(각 object의hashCode가 다르다) 직접 Set에 넣고 equals를 실행하지 않았다는 것이다.총괄: equals를 다시 쓸 때 보통hashCode를 다시 쓰고 서로 다른 object의hashCode가 다르다는 것을 최대한 보장하여hash의 성능을 향상시킨다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.