Unten ist meine Schülerklasse
%Vor%letzte Änderung: aber immer noch nicht das richtige Ergebnis
%Vor%Wenn ich ein Objekt von TreeSet & lt; Student & gt; erzeuge, bekomme ich eine Liste von Student-Objekten basierend auf dem eindeutigen Namen & amp; auch nach Namen geordnet.
Aber ich brauche einen eindeutigen Schülernamen in meinem TreeSet & lt; Student & gt; mit der Reihenfolge nach Schüler-RolleNr.
Ist es mit Komparator möglich? Kann mir jemand helfen, Jeder Vorschlag wird geschätzt. Danke.
UPDATE: Hier ist das komplette Programm:
%Vor%Update: 2: Danke euch allen für eure Vorschläge, ich brauche noch ein paar mehr:)
%Vor%AUSGABE :
%Vor%Freunde, was auch immer ich mit zwei Komparatoren bekommen habe, ist es möglich erreiche das gleiche beim Hinzufügen der Objekte ?? Ich kann nicht zuerst Elemente hinzufügen & amp; Verwenden Sie dann einen neuen Komparator, um die gewünschte Reihenfolge zu erreichen. Ich manipuliere Tausende von Werten, also muss auch die Leistung berücksichtigt werden.
in TreeSet
Es wird Komparator verwendet, während Elemente zum Sortieren und einmaligen Prüfen hinzugefügt werden,
Jetzt ist das Problem, wenn Sie Komparator für Rolle nein verwenden, haben Sie es sortiert nach Rolle nein und eindeutige Rolle nos auch. Sie können nicht beide zusammen im Treeset haben.
Ich würde vorschlagen, dass Sie gehen.
TreeSet
Hier konzentrierst du dich auf das Entfernen von Duplikaten ArrayList
und sortieren Sie sie in der gewünschten Reihenfolge Die Antwort von @ ralph zur Verwendung eines TreeSet
mit einem angegebenen Komparator ist ein guter, benutze das.
Sie sollten das Konzept einer "Studenten-Datenbank" in eine Klasse einfügen, die die richtigen Verhaltensweisen offenlegt und dokumentiert, anstatt nur eine rohe Sammlung zu verwenden. Wenn es darum geht, Listen von Schülern in bestimmten Aufträgen zu entwerfen, legen Sie Methoden offen (vielleicht geben Sie Iterable<Student>
zurück, die das sagen. Hinter den Kulissen können Sie je nach Nutzungsmuster eine Vielzahl von Dingen tun:
Set
s- und% Maps
-Studenten nach Interessengebieten. Arrays.sort()
und einer angegebenen Comparator
. Beispiel ....
%Vor% Sie müssen equals()
und hashCode()
für Ihre Klasse Student
überschreiben, um nur den Namen des Schülers zu vergleichen. Dann erhalten Sie in Ihrem TreeSet
eine Eindeutigkeit (stillschweigend). Offensichtlich müssen Sie dann defensiv codieren, um vor dem Einfügen von studentSet.contains(newStudent)
zu prüfen, ob newStudent
vorhanden ist. Sie wissen also, ob Sie ein Duplikat haben oder nicht.
Wenn dieser Platz vorhanden ist, kann Ihr Code zum Einfügen eines Schülers wie folgt aussehen:
%Vor%Ihr Baumsatz ist dann voll von Schülern, deren Namen eindeutig sind, und Ihr Hinzufügen-Vorgang meldet einen Fehler, wenn nicht. (Das Auslösen einer Ausnahme ist nur eine mögliche Route und nur dann sinnvoll, wenn ein Student mit einem doppelten Namen tatsächlich eine Ausnahmebedingung ist, aber Sie haben es nicht gesagt.)
Sie können ein neues TreeSet mit einem anderen Vergleicher initialisieren. - Alles, was Sie tun müssen, ist, einen neuen Comparator zu schreiben (implementiert die java.util.Comparator-Schnittstelle), diesen Komparator zu verwenden, um ein neues TreeSet zu initialisieren und dann alle Studenten zum Set hinzuzufügen.
%Vor%Jedes Tree Set kann einen eigenen Komparator zum Sortieren haben, wenn kein Comparator angegeben ist, dann verwendet das Tree Set die natürliche Reihenfolge der Set-Elemente.
hinzugefügt
Wenn Sie nur den Namen Unique Students benötigen, haben Sie zwei Möglichkeiten:
Ein bisschen so:
%Vor%Tags und Links java sorting collections unique treeset