Heim >Java >javaLernprogramm >entspricht dem Hashcode

entspricht dem Hashcode

(*-*)浩
(*-*)浩nach vorne
2019-08-24 15:53:482464Durchsuche

Zusammenfassung von Equals und Hashcode:

entspricht dem Hashcode

Wenn die Equals-Methode nicht überschrieben wird, wird sie zur Bestimmung des verwendet Speicheradressenreferenz des Objekts. Ob eine Adresse verwendet werden soll. Nach dem Umschreiben wird es im Allgemeinen verwendet, um zu vergleichen, ob der Inhalt der Objekte gleich ist (z. B. enthält das Studentenobjekt Namen und Alter). Wir schreiben die Methode equal um, um zu beurteilen, dass dies der Fall ist, solange Name und Alter gleich sind gelten als Student).

HashCode ist ein int-Typwert, der von jdk basierend auf der Adresse oder Zeichenfolge oder Nummer des Objekts berechnet wird. Natürlich können Sie ihn auch umschreiben. Die Hashcode-Methode wird nur in Sammlungen verwendet.

Wenn ein Objekt in eine Menge eingefügt wird, wird zuerst beurteilt, ob der Hashcode gleich ist, und dann, ob gleich ist, ob beide gleich sind, es ist das gleiche Objekt in, aber set erlaubt keine Duplizierung, da es keine Duplizierung von Put in zulässt.

Zum Beispiel:

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
}

Wie oben zu sehen ist, heißen beide Strings „yjc“, unabhängig davon, ob es sich direkt um „yjc“ oder einen neuen String („yjc“) handelt. , ihr Hashcode Trotzdem. Sie können dies also verwenden, wenn Sie die Hashcode-Methode überschreiben.

Wenn Sie beispielsweise möchten, dass bei gleichem Namen und Alter nicht nur die Gleichen, sondern auch ihre Hashcodes gleich sind, können Sie den Hashcode wie folgt umschreiben:

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
}

Auf diese Weise gibt es zwei Schüler mit demselben Namen und demselben Alter. Das Objekt ist dasselbe Objekt und wird beim Platzieren als dasselbe betrachtet. Unabhängig davon, wie viele solcher Objekte platziert werden, wird dies immer der Fall sein gleich 1 sein.

In ähnlicher Weise ist auch der HashMap-Schlüssel eindeutig. Das HashMap-Objekt lokalisiert den Speicherort anhand des HashCodes seines Schlüssels und verwendet equal(key), um den entsprechenden Wert zu erhalten, sodass beurteilt wird, ob der Schlüssel vorhanden ist Der Hashcode wurde beim Einfügen wiederverwendet und gleich wird bei Wiederholung überschrieben.

Das obige ist der detaillierte Inhalt vonentspricht dem Hashcode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen