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 중국어 웹사이트의 기타 관련 기사를 참조하세요!