> Java > java지도 시간 > 본문

같음과 해시코드

(*-*)浩
풀어 주다: 2019-08-24 15:53:48
앞으로
2418명이 탐색했습니다.

equals 및 해시 코드 요약:

같음과 해시코드

equals 메서드는 재정의되지 않습니다. 그렇다면 객체의 메모리 주소 참조가 주소인지 여부를 확인하는 데 사용됩니다. 다시 작성한 후 일반적으로 개체의 내용이 동일한지 비교하는 데 사용됩니다(예: 학생 개체에 이름과 나이가 포함되어 있음). 이름과 나이가 같은 한 동일한지 판단하기 위해 같음 메서드를 다시 작성합니다. 학생)으로 간주됩니다.

hashCode는 객체의 주소나 문자열 또는 숫자를 기반으로 jdk에서 계산한 int 유형 값입니다. 물론 해시코드 메서드는 컬렉션에서만 사용됩니다.

객체를 집합에 넣을 때 먼저 해시코드가 동일한지 확인한 다음, 동일한지 여부를 확인하면 동일한 객체일 수 있습니다. 넣지만 세트는 중복을 허용하지 않으므로 넣지 않습니다.

예:

public class Student {
        private int age;
        private String name; 
        public Student(int age ,String name){
            this.age = age;
            this.name = name;
        }
        public int getAge() {
           return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getName() {
           return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        //重写equals方法,判断姓名和年龄相同就是相等的
        public boolean equals(Object o){
            if(o == null){
                return false;
            }
            if(this.getClass() != o.getClass()){
             return false;   
            }
            Student student = (Student)o;
            if(name == null){
                return false;
            }
            if(age==student.getAge()&&name.equals(student.getName())){
                return true;
            }
            return false;
        }       
    public static void main(String[] args) {
        Student studentOne = new Student(1,"yjc");
        Student studentTwo = new Student(1,new String("yjc"));
        System.out.println(studentOne.equals(studentTwo));
        System.out.println("1: "+studentOne.getName().hashCode());
        System.out.println("2: "+studentTwo.getName().hashCode());
    }
    //输出结果:true
                1: 119666
                2: 119666
}
로그인 후 복사

위에서 볼 수 있듯이 두 문자열은 직접 "yjc"이든 새 문자열이든 "yjc"라고 합니다. ("yjc" ), 해시코드는 동일합니다. 따라서 hashcode 메서드를 재정의할 때 이를 사용할 수 있습니다.

예를 들어, 이름과 나이가 동일하다면 동일자뿐만 아니라 해시 코드도 동일해야 합니다. 해시 코드를 다음과 같이 다시 작성할 수 있습니다.

public int hashcode(){
    final int prime = 31; 
    int result = 1;    
    result = prime*result + age;    
    result = prime*result + (name == null? 0 : name.hashcode());   
    return result;//直接写age+(name == null? 0 : name.hashcode())也行就是感觉太简单了0.0
}
로그인 후 복사

이렇게 하면 같은 나이의 두 이름과 Student 객체는 동일한 객체이며 세트에 배치될 때 동일한 객체로 간주됩니다. 이러한 객체가 아무리 많이 배치되어도 set.size()는 항상 동일하게 간주됩니다. 1과 같아야 합니다.

마찬가지로 HashMap 키도 고유합니다. HashMap 객체는 해당 Key의 hashCode에 따라 저장 위치를 ​​찾고 해당 Value를 얻기 위해 equals(key)를 사용하므로 해당 값이 맞는지 여부를 판단합니다. 키는 넣을 때 재사용됩니다. 해시 코드와 같음의 경우 반복되면 덮어쓰게 됩니다.

위 내용은 같음과 해시코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!