La capa subyacente de Treeset es KeySet () de Treemap, y Treemap se implementa en base a árboles rojos y negros. Los árboles rojos y negros son un árbol de búsqueda binario equilibrado, lo que puede garantizar que la diferencia de altura entre los subárboles izquierdo y derecho de cualquier nodo no exceda el doble que el árbol más corto.
Treemap se clasifica por clave, por lo que los elementos en Treeset también se clasifican. Obviamente, el método Compareto () debe llamarse cuando el elemento se inserta en el conjunto de árboles, por lo que los elementos en el conjunto de árboles deben implementar la interfaz comparable. TreeSet como conjunto, no permite que aparezcan elementos duplicados. TreeSet usa comparación () para juzgar elementos duplicados, no igual (), consulte el siguiente código.
import java.util.treeset; import org.junit.test; public class testtreeSet {class Combine implementa comparable <Eptin> {private int p1; private int p2; public Combine (int p1, int p2) {this.p1 = p1; this.p2 = p2;}@override int hastcode () {regreso p1 * 31 + p2;} iguales (object obj) {System.out.print ("si igual" + this + "y" + obj); boolean rect = false; if (obj instanceOf combine) {system.out.println ("si igual" + this + "y" + obj); combine otro = (combine) obj; rect = (this.p1 == otro.getp2 ());} system.out.println (":" + rect); return rect;}@anular public int compareTo (combine o) {system.out.print ("comparar" + this + "y" + o); // solo considere p1if (this.p1 <o.p1) {system.println (", return -1"); (this.p1> o.p1) {system.out.println (", return 1"); return 1;} else {system.out.println (", return 0"); return 0;}}@anular 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 combine (1, 2); combine c2 = new (1, 2); combine c3 = nuevo combine (1, 3, 3, combine c4 = combine cm. 2); TreeSet <Combine> set = new TreeSet <EfiPine> (); set.add (c1); set.add (c2); set.add (c3); set.add (c4); while (! set.isEmpty ()) {// emite los elementos en TreeSet en orden Combine combine = set.pollFirst (); system.out.println (combine.getp1 () + "/t" + combine.getp2 ();}}}}}Producción:
Comparar (1,2) y (1,2), devolver 0
Comparar (1,2) y (1,2), devolver 0
Comparar (1,3) y (1,2), devolver 0
Comparar (5,2) y (1,2), regresar 1
1 2
5 2
Vemos que independientemente de si el comparación () devuelve igual o no, no se llama al método igual ().
Resumir
Lo anterior se trata de análisis de elementos repetitivos del juicio de treeset y ejemplos de código. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!