Die zugrunde liegende Schicht von Treeset ist Treemaps Keyset (), und Treemap wird basierend auf roten und schwarzen Bäumen implementiert. Rote und schwarze Bäume sind ein ausgewogener binärer Suchbaum, der sicherstellen kann, dass die Höhenunterschiede zwischen linken und rechten Unterbäumen eines Knotens nicht doppelt so hoch wie die des kürzeren Baumes.
Treemap wird nach Schlüssel sortiert, sodass auch die Elemente in Treeset sortiert sind. Offensichtlich muss die Vergleiche () -Methode aufgerufen werden, wenn das Element in den Treeset eingefügt wird, sodass die Elemente im Treeset die vergleichbare Schnittstelle implementieren müssen. Treeset Als Set ermöglicht es nicht, dass doppelte Elemente erscheinen. Treeset verwendet Vergleiche (), um doppelte Elemente zu beurteilen, nicht gleich (), siehe folgenden Code.
import java.util.TreeSet;import org.junit.Test;public class TestTreeSet {class Combine implements Comparable<Combine> {private int p1;private int p2;public Combine(int p1, int p2) {this.p1 = p1;this.p2 = p2;}@Override public int hashCode() {return p1 * 31 + p2;}@Override public Boolean Equals (Objekt obj) {system.out.print ("ob gleich" + this + "und" + obj); boolean rect = false; if (obj Instance von kombiniert) {system.out.println ("ob gleich" + this + "und" + OBJ); kombinierter = (kombinieren) obj; rect = (this.p1 == andere). other.getP2 ());} system.out.println (":" + rect); return;}@override public int vergleiche (kombinieren o) {system.out.print ("vergleiche" + this + "und" + o); // nur p1if (this.p1 <o.p1) {system.out.Out.OUT.OUT.OUT.Println (". > o.p1) {System.out.println(", return 1");return 1;} else {System.out.println(", return 0");return 0;}}@Override public String toString() {return "(" + p1 + "," + p2 + ")";}public int getP1() {return p1;}public void setP1(int p1) {this.p1 = p1;} public int getP2 () {return p2;} public void setp2 (int p2) {this.p2 = p2;}}@test public void test () {kombine c1 = neuer Kombination (1, 2); Kombine c2 = New Combine (1, 2); Kombine (5). 2); Treeset <combine> set = new treeset <combine> (); set.add (c1); set.add (c2); set.add (c3); set.add (c4); while (! set.isempty ()) {// Die Elemente in Treeset ausgeben, um kombine combine = set.pollfirst ();Ausgabe:
Vergleiche (1,2) und (1,2), kehren Sie 0 zurück
Vergleiche (1,2) und (1,2), kehren Sie 0 zurück
Vergleichen Sie (1,3) und (1,2), zurück 0
Vergleichen Sie (5,2) und (1,2), zurück 1
1 2
5 2
Wir sehen, dass die Methode Equals () nicht aufgerufen wird, unabhängig davon, ob die Vergleiche () gleich oder nicht zurückgibt.
Zusammenfassen
Bei dem obigen dreht sich alles um die Analyse von Treeset -Urteilsvermögen und Code -Beispiele. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!