TreeSet-Konstruktor mit dem Komparator<?> - parameter
In der Java-Dokumentation für die Klasse TreeSet eine der Konstruktoren gezeigt wird, haben die folgenden header:
TreeSet(Comparator<? super E> c)
Kann mir jemand helfen, erklären, warum es einen Konstruktor TreeSet, die eine comparator-Objekt als argument? Ich habe keine Ahnung, warum das so ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Elemente eines TreeSet gehalten werden sortiert.
Wenn Sie einen Konstruktor, der hat kein Komparator, der natürlichen Reihenfolge der element-Klasse (definiert durch die Umsetzung der
Comparable
) würde verwendet werden, um die Sortierung der Elemente des TreeSet.Wenn Sie möchten, eine andere Bestellung, die Sie liefern, einen Komparator, in den Konstruktor.
Alle oben genannten Antworten sind richtig, aber ich möchte hinzufügen, dass eine benutzerdefinierte Komparator, abgesehen von daraus resultierenden in einer anderen Sortierung, wird auch der filter-Werte anders.
Da Setzen die Werte sind eindeutig, wenn die benutzerdefinierte Komparator gibt, dass die beiden Werte identisch sind, nur eine von Ihnen erscheint in dem Satz:
Dieser Konstruktor ermöglicht es Ihnen zu definieren, die
Comparator
verwendet beim einfügen einesT
in den Baum, der hinter derSet
.Einen
TreeSet
ist ein binary search tree, die auf der Vorstellung basiert, dass bei zwei gegebenen Elementen eine und b, ist es entweder der Fall, dass eine ist "kleiner als" b, oder nicht. Wenn Sie jedoch definieren Sie eine eigene Klasse, dieTreeSet
weiß nicht, wie zu bestimmen, ob ein Objekt der Klasse "kleiner als" ein anderes Objekt, weil Sie nicht wissen, Ihre beabsichtigte interpretation der Objekte,' Inhalt. Daher können Sie erstellen eineComparator
denen tun können, die Vergleiche, die im Auftrag desTreeSet
.Es ist verwendet, um das Sortieren der Elemente der Menge nach vom Benutzer definierten Regeln.
Sehen die javadoc:
Sehen hier für weitere Informationen über Natürliche Objekte bestellen.
Treeset-Klasse verfügt über die unten Konstruktor so, dass Treeset speichert das element, mit dem in der Reihenfolge, wie beschrieben, durch den Komparator c.Unten ist ein Beispiel um zu veranschaulichen das gleiche.
Hier, wenn Sie sehen, die namecomp ist die Implementierung des Comparator-interface und damit die Sortierung der Elemente des Employeee Klasse in absteigender Reihenfolge auf der Grundlage des Felds Name.
Jetzt das Treeset ist die Umsetzung der namecomp Komparator zum speichern das element in absteigender Reihenfolge auf der Grundlage des Felds Name.
Ausgabe
2
1
3
Hoffe, das beantwortet die Frage.
Comparator interface is used to order the objects of user-defined class.
Es bietet vielfältige Sortier-Reihenfolge, d.h. Sie können die Sortierung der Elemente, die auf Daten basieren, die Mitglied. Zum Beispiel kann es auf rollno, name, Alter oder irgendetwas anderes.
Indem ein Komparator in
TreeSet(Comparator<? super E> c)
es bedeutet, dass Sie können, um Ihre TreeSet auf der Grundlage der parameter, die Sie wünschen.Angenommen, Sie haben
TreeSet<User>
und Sie haben eine User-Klasse, mit dem Feldid
im es.Nun, wenn Sie möchten, zu Sortieren TreeSet anhand der Benutzer-id können Sie ein Comparator-Objekt im TreeSet, um die gewünschte Bestellung.
TreeSet mit default-Konstruktor wird die Sortierung der element in der natürlichen aufsteigender Reihenfolge, aber wenn Sie möchten einige benutzerdefinierte Sortierung nach Ihren Anforderungen, dann sollten Sie gehen für die Komparator-Schnittstelle.
eq
Dies ist Ihr Standard-Klasse Mitarbeiter und der Sie Sortieren möchten diese Klasse nach dem Gehalt dann.
Hier haben wir erstellt eine andere Klasse durch die Implementierung von Comparator.
[ID : 1001 Name : Ram Salary : 1000 , ID : 1003 Name : sumo Salary : 3000 , ID : 1002 Name : lucky Salary : 7000 ]
dies ist die Ausgabe des obigen code..ich habe nicht kapiert warum. kann sein, weilcompare
Methode gibt0
bei gleichen Gehalt.