왜 equals () 를 다시 쓰는 동시에hashCode () 방법을 다시 써야 합니까?

2047 단어
우선 우리는 우리가 왜 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 방법을 다시 썼다면우리가 원하는 결과야.같은 값을 얻는 거야.

좋은 웹페이지 즐겨찾기