Por qué se puede ordenar TreeSet
La clase TreeSet se declara de la siguiente manera:
clase pública TreeSet
extiende AbstractSet
implementa SortedSet< E&. gt ;, Cloneable, java.io.Serializable
Dado que la clase SortedSet está implementada, tiene una función de clasificación natural.
La diferencia entre TreeSet y HashSet es que no se permiten elementos duplicados en el conjunto. En el caso de la clasificación natural, solo se permite almacenar varios elementos del mismo tipo en TreeSet y se requiere que no sea una clase personalizada. add(new String("ccc"));
treeSet.add(new String("aaa"));
System.out.println(treeSet
El resultado es:
[aaa, bbb, ccc]
Este es el resultado cuando treeSet.size()=3. Además, es una salida ordenada.
Si se agregan objetos de varias clases a la colección TreeSet, se producirá una excepción. Por ejemplo:
treeSet.add(new String("aaa"));
treeSet.add(new Integer(100));
System. out .println(treeSet);
Se produjo una excepción:
Excepción en el hilo "principal" java.lang.ClassCastException: java.lang.String
en java .lang.Integer.compareTo(Integer.java:35)
en java.util.TreeMap.
en java.util.TreeMap.compare(TreeMap.java:1093)
en java.util.TreeMap.put(TreeMap.java:465)
en java.util.TreeSet.add(TreeSet .java:210)
en org.shirdrn.TreeSetTest.main(TreeSetTest.java:18)
Para una clase personalizada, solo puede contener un objeto y la clase de implementación no necesita implementar la interfaz Comparable.
Sin embargo, si desea almacenar objetos de más de una clase personalizada, se producirá una excepción java.lang.ClassCastException si no implementa la interfaz Comparable. Por lo tanto, para poder realizar una clasificación personalizada, debe implementar un comparador.
La implementación de la interfaz Comparable requiere implementar el método compareTo().
Además, TreeSet no almacena los mismos elementos, lo que requiere clases personalizadas para anular los métodos hashCode() y equals():
clase Persona implementa Comparable{
nombre de cadena privada
; p>p>
edad entera privada
edad entera pública getAge() {
edad de retorno
}
public void setAge (edad entera) {
this.age = edad;
}
public String getName() {
devolver nombre;
}
public void setName(nombre de cadena) {
this.name = nombre; p>
< public boolean es igual (Objeto o){
if(this == o){
return true; >