왜 equals와hashCode를 다시 쓰는 방법
우리는 클래스를 만들고 equals 방법을 다시 쓰고 두 개의 대상인person1과person2 대상을 만들고 둘을 비교합니다.
1. equals 다시 쓰는 방법
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if (this == obj) {// , true
return true;
}
if (obj == null) {// null, false
return false;
}
if (obj.getClass() != this.getClass()) {
return false;// , false
}
Person person=(Person)obj;
if(person.getName().equals(getName())&&person.getAge()==getAge()){
return true;
}
return false;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Junit 테스트를 통해 다음과 같은 두 객체를 HashSet에 저장합니다.
public class TestDemo {
Set<Person> set=new HashSet<Person>();// HashSet person
@Test
public void test1(){
Person person1=new Person();
person1.setName("zhang");
person1.setAge(18);
Person person2=new Person();
person2.setName("zhang");
person2.setAge(18);
System.out.println(" :"+person1.equals(person2));
set.add(person1);
set.add(person2);
System.out.println("set "+set.size()+"
"+set);
}
}
결과는 다음과 같습니다.
양자 비교 결과:true
set에는 두 개의 객체가 있습니다. [com.zhang.demo.Person@1ceebfa, com.zhang.demo.Person@1e6743e]
이때 우리는 equals를 다시 쓰는 방법을 통해 두 대상이 같다는 것을 판단했지만 둘 다 set에 저장되었다는 문제를 발견했다.나니?모두가 알다시피 set에는 서로 다른 대상만 저장할 수 있다. 분명히 HashSet에 있어 equals 방법을 다시 쓰는 것만으로는 부족하다. (HashMap에도 마찬가지) 집합 비교 대상의 원리를 이해한 결과 원래 집합이 두 대상을 먼저 비교하는 HashCode가 같은지 아닌지를 알 수 있다. 만약에 같다면 equlas 방법을 통해 비교하고 두 방법이 모두 통과한다면 두 대상은 같은 대상으로 간주된다.그런 다음 hashCode 메서드를 다시 작성합니다.
2.hashCode 다시 쓰기 방법
public int hashCode() {
// TODO Auto-generated method stub
int prime = 31;//
int result = 1;
result=result*prime+(name==null?0:name.hashCode());
result=result*prime+age;
return result;
}
그리고 위의 테스트 방법을 통해 테스트를 한 결과 다음과 같습니다.
양자 비교 결과:true set에는 1개의 객체가 있습니다:[com.zhang.demo.Person@d6168d67]
이때 HashSet에는 하나의 객체만 저장됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.