La couche sous-jacente de Treeset est la clé de Treemap (), et Treemap est implémentée sur la base d'arbres rouges et noirs. Les arbres rouges et noirs sont un arbre de recherche binaire équilibré, ce qui peut garantir que la différence de hauteur entre les sous-arbres gauche et droite de tout nœud ne dépassera pas un deux fois celui de l'arbre plus court.
Treemap est trié par clé, donc les éléments de Treeset sont également triés. De toute évidence, la méthode compareto () doit être appelée lorsque l'élément est inséré dans le Treeset, de sorte que les éléments de l'arbre doivent implémenter l'interface comparable. Treeset comme un ensemble, il ne permet pas aux éléments en double apparaisse. TreeSet utilise compareto () pour juger des éléments en double, pas equals (), voir le code suivant.
import java.util.treeset; import org.junit.test; public class TestTreeSet {class combine implémente comparable <grouss> {private int p1; private int p2; public combine (int p1, int p2) {this.p1 = p1; this.p2 = p2;} @ override int hashcode () {return p1 * 31 + p2; equals (objet obj) {System.out.print ("si égal" + this + "et" + obj); booléen rect = false; if (obj instanceof combine) {System.out.println ("si égal" + this + "et" + obj); combiner autre autre = (combine) obj; rect = (this.p1 == autre.getp1 () & g this.p2 == == autre.getp2 ());} System.out.println (":" + rect); rector rect;} @ override public int compareto (combine o) {System.out.print ("compare" + this + "et" + o); // unique (this.p1> 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;} p1) {this.p1 = p1;} public int getp2 () {return p2;} public void Setp2 (int p2) {this.p2 = p2;}} @ test public void test () {combine c1 = new combination (1, 2); combiner c2 = new combine (1, 2); combination c3 = newe 2); TreeSet <grandir> set = new TreeSet <Sembine> (); set.add (c1); set.add (c2); set.add (c3); set.add (c4); while (! set.isempty ()) {// Sélectionnez les éléments dans TreeSet dans Ordre Combine Combine = Set.PollFirst (); System.out.println (Combine.getp1 () + "/ T" + Combine.getp2 ());}}}Sortir:
Comparer (1,2) et (1,2), retour 0
Comparer (1,2) et (1,2), retour 0
Comparer (1,3) et (1,2), retour 0
Comparez (5,2) et (1,2), retour 1
1 2
5 2
Nous voyons que, que la compareto () revienne égale ou non, la méthode equals () n'est pas appelée.
Résumer
Ce qui précède est tout au sujet de l'analyse des éléments répétitifs du jugement d'arbres et des exemples de code. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!