왜 equals () 를 다시 쓰는 동시에hashCode () 방법을 다시 써야 합니까?
equals () 방법의 작용은 당연히 우리가 어떤 대상이 본 대상과 같은지 아닌지를 판단하는 데 도움을 주는 것이다.
===를 사용하여 판단하는 것은 단지 두 대상의 주소 값이 같은지 아닌지일 뿐이다. 그러나 우리가 일상적으로 사용하는 과정에서 어떤 종류에 대해 우리가 필요로 하는 것은 이 종류의 속성이 같을 수 있을 때 우리는 두 대상이 같다고 생각한다.어떻게 하면 이퀄스 방법을 다시 쓰는 건데,
그런데 왜 해시코드 방법을 동시에 다시 써야 하나요?
hashCode ()가 되돌아오는 것은hash코드입니다. 같은 대상은 같은hash코드를 가져야 합니다.기다리지 않으면 어떤 결과가 나올지.예를 들다
public class Dog {
private String name;
public Dog(String name) {
this.name = name;
}
public static void main(String[] args) {
String str1 = new String("a");
String str2 = new String("a");
HashMap map1 = new HashMap<>();
map1.put(str1,"value");
System.out.println("str1.equals(str2):"+str1.equals(str2));
System.out.println("key str1 ,value "+map1.get(str1));
System.out.println("key str2 ,value :"+map1.get(str2));
//-------------------------------------------------------
System.out.println("--------------");
Dog Dog1 = new Dog("a");
Dog Dog2 = new Dog("a");
HashMap map2 = new HashMap<>();
map2.put(Dog1,"value");
System.out.println("Dog1.equals(Dog2):"+Dog1.equals(Dog2));
System.out.println("key Dog1 ,value "+map2.get(Dog1));
System.out.println("key Dog2 ,value "+map2.get(Dog2));
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Dog dog = (Dog) o;
return Objects.equals(name, dog.name);
}
/*@Override
public int hashCode() {
return Objects.hash(name);
}*/
}
위 코드를 읽으십시오: Dog 대상을hashMap의 키 값으로 할 때dog1과dog2가 같은 것을 볼 수 있습니다. 이치대로hashMap의 값을 찾을 때dog1이나dog2를 사용할 때 같은value를 얻을 수 있습니다.하지만 실제로는 없었다.hashCode 방법을 다시 썼다면우리가 원하는 결과야.같은 값을 얻는 거야.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.