JAVA-Lernset-Sammlung, HashSet-Sammlung, LinkedHashSet-Sammlung, TreeSet-Sammlung

Java-Sammlungen wie Map, Set, List usw. Alle Sammlungen können nur Referenztypdaten speichern. Sie sind Container zum Speichern von Referenztypdaten und können keine grundlegenden Datentypen wie int, long, float, double usw. speichern.

Set-Sammlung

Die Set-Sammlung ist eine Unterschnittstelle der Collection-Sammlung.
Merkmale:
Sie enthält keine wiederholten Elemente
, hat keinen Index, kann die for-Schleife nicht zum Durchlaufen
der HashSet-Methode verwenden und gibt keine Garantien für die Iterationsreihenfolge der Sammlung ;

Hashwert

Der vom JDK berechnete Wert des Typs int basierend auf der Adresse des Objekts oder einer Zeichenfolge oder einer Zahl

Erhalten Sie den Hash-Wert des Objekts: object.hashCode()
Funktionen:
Der Hash-Wert mehrerer Aufrufe desselben Objekts ist gleich;
standardmäßig ist der Hash-Wert verschiedener Objekte unterschiedlich;
durch Methodenumschreiben kann dies realisiert werden Hashwerte verschiedener Objekte sind gleich;

Funktionen der HashSet-Sammlung

Die zugrunde liegende Datenstruktur ist eine Hash-Tabelle, die die Eindeutigkeit der eingestellten Elemente garantiert.
Es gibt keine Garantie für die Iterationsreihenfolge der Daten. Es
gibt keine Methode mit einem Index und die gewöhnliche for-Methode kann nicht zum Durchlaufen verwendet werden
. Da Es handelt sich um eine Set-Sammlung, eine Sammlung, die keine wiederholten Daten enthält.

Gemeinsame Datenstruktur-Hash-Tabelle

Die Hash-Tabelle wird mit einem Array + einer verknüpften Liste implementiert, bei der es sich um eine verknüpfte Liste mit einem Element handelt.

Verwenden Sie die Hash-Struktur, um die Einzigartigkeit des festgelegten Arrays zu erkennen

Sie müssen die Equals- und Hashcode-Methoden in der Datentabelle neu schreiben.
Sie können das Umschreiben direkt in Generate auswählen.

Fügen Sie ein Beispiel für das Umschreiben ein:
Erstellen eines Schülerklassenobjekts:

package hashset;

import java.util.Objects;

public class student {
    
    
    private String name;
    private int age;

    public student() {
    
    
    }

    ;

    public student(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }

    @Override  //此处重写了equals方法
    public boolean equals(Object o) {
    
    
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        student student = (student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override //此处重写了hashCode方法
    public int hashCode() {
    
    
        return Objects.hash(name, age);
    }
}

Erstellen Sie eine Hashset-Tabelle und durchlaufen Sie sie

package hashset;

import java.util.HashSet;

public class hashsetdemo {
    
    
    public static void main(String[] args) {
    
    
        HashSet<student> ha = new HashSet<student>();
        student s1 = new student("haha",12);
        student s2 = new student("haaa",122);
        student s3 = new student("haaa",122);


        ha.add(s1);
        ha.add(s2);
        ha.add(s3);

        for(student hh:ha) {
    
    
            System.out.println(hh.getName()+" "+hh.getAge());
        }

    }
}

Funktionen der LinkedHashSet-Sammlung

Die durch Hash-Tabellen und verknüpfte Listen implementierte Set-Schnittstelle verfügt über eine vorhersehbare Iterationsreihenfolge.
Die Reihenfolge des Arrays wird durch die verknüpfte Liste beibehalten, und die Einzigartigkeit des Arrays wird durch das Hashset beibehalten. Diese
Implementierung unterscheidet sich vom HashSet darin, dass alle Einträge der doppelt verknüpften Liste beibehalten werden.

TreeSet-Satz

Merkmale: Die Elemente sind in der richtigen Reihenfolge und die spezifische Sortiermethode hängt von der Konstruktionsmethode ab.
Konstruktionsmethode ohne Argumente: TreeSet () verwendet natürliche Sortierung, was bedeutet, dass die Klasse, zu der es gehört, die
Konstruktionsmethode mit Parametern implementieren kann: Comparator Schnittstelle, die es der Sammlungskonstruktionsmethode ermöglichen soll, die Implementierungsklasse des Comparator-Objekts zu empfangen, override(Compare(To1,To2) method;

Codebeispiel, zuerst nach Alter und dann nach Name sortieren:

package treeset;

import java.util.Comparator;
import java.util.TreeSet;

public class treeset {
    
    
    public static void main(String[] args) {
    
    
        TreeSet<student> tr = new TreeSet<student>(new Comparator<student>() {
    
    
            @Override
            public int compare(student s1, student s2) {
    
    
                int num = s1.getAge() - s2.getAge();
                int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
                return num2;
            }
        });
        student s1 = new student("zzha",23);
        student s2 = new student("asds",23);

        tr.add(s1);
        tr.add(s2);
        for(student s: tr){
    
    
            System.out.println(s.getName()+" "+s.getAge());

        }
    }
}

Ich denke du magst

Origin blog.csdn.net/weixin_52723971/article/details/110692767
Empfohlen
Rangfolge