¿Cómo ordenar un TreeSet con objetos definidos por el usuario en Java?

La interfaz del comparador ordena los objetos de las clases definidas por el usuario. Un objeto de la clase Comparator es capaz de comparar dos objetos de dos clases diferentes. La siguiente función compara obj1 con obj2

  • TreeSet implementa la interfaz SortedSet . Por lo tanto, no se permiten valores duplicados.
  • Los objetos en un TreeSet se almacenan ordenados y en orden ascendente.
  • TreeSet no conserva el orden de inserción de los elementos, pero los elementos se ordenan por claves.
  • Si dependemos del orden de clasificación natural predeterminado, los objetos que se insertan en el árbol deben ser homogéneos y comparables. TreeSet no permite insertar objetos Heterogéneos. Lanzará una classCastException

Dado que TreeSet implementa la interfaz sortedSet , los elementos por defecto se ordenan en orden ascendente. Pero si queremos cambiar en la Clasificación, como hacerlo en orden decreciente o clasificar según el nombre, las calificaciones, el Salario (todas estas son clases definidas por el usuario) de cualquier manera.

Entonces, la solución a todo esto es que podemos hacer la clasificación implementando la clase de comparación de forma explícita.

Sintaxis:

public int compare(Object obj1, Object obj2):

Acercarse :

  • La interfaz del comparador se utiliza para ordenar los objetos de la clase definida por el usuario.
  • Esta interfaz está presente en el paquete java.util y contiene 2 métodos compare (Object obj1, Object obj2) y equals (Object element).
  • Usando un comparador, podemos ordenar los elementos en función de los miembros de datos. Por ejemplo, puede estar en marcas, nombre o cualquier otra cosa.

El método de la clase Colecciones para ordenar los elementos de la Lista se utiliza para ordenar los elementos de la Lista por el comparador dado. 

// To sort a given list. ComparatorClass must implement 
// Comparator interface.

public void sort(List list, ComparatorClass c)

Ejemplo:

Java

// Java program to Sort a TreeSet with
// User Defined Objects
 
import java.io.*;
import java.util.*;
class students{
   
    private int marks;
    private String name;
   
    // constructor
    public students(int value, String name)
    {
        this.marks=value;
        this.name=name;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name= name;
    }
     
    public int getMarks()
    {
        return marks;
    }
     
}
 
// Comparator class will override the compare
// method which will compare the two objects
// passed in the parameter
class myMarksComparator implements Comparator<students>
{
   
    public int compare(students s1, students s2)
    {
        return s1.getMarks()-s2.getMarks();
    }
}
 
class myNameComparator implements Comparator<students>
{
    public int compare(students s1, students s2)
    {
        return s1.getName().compareTo(s2.getName());
    }
}
 
class GFG {
 
    public static void main (String[] args){
         
        // Creating the TreeSet with Comparator object passed
        // as the parameter which will sort the user defined
        // objects of TreeSet
        TreeSet<students> set = new TreeSet<students>(new myMarksComparator());
         
        set.add(new students(450,"Sam"));
        set.add(new students(341,"Ronaldo"));
        set.add(new students(134,"Daniel"));
        set.add(new students(590,"George"));
         
        System.out.println("increasing Order with the Marks");
         
        // Printing the TreeSet elements
        for(students ele: set)
        {
            System.out.print(ele.getName()+" "+ele.getMarks());
            System.out.println();
        }
         
         
        TreeSet<students> mrks= new TreeSet<students>(new myNameComparator());
         
        mrks.add(new students(450,"Sam"));
        mrks.add(new students(341,"Ronaldo"));
        mrks.add(new students(134,"Daniel"));
        mrks.add(new students(590,"George"));
         
        System.out.println();
         
        for(students ele : mrks)
        {
            System.out.print(ele.getName() +" "+ ele.getMarks());
            System.out.println();
        }
 
    }
}
Producción

-------increasing Order with the Marks
Daniel 134
Ronaldo 341
Sam 450
George 590

Daniel 134
George 590
Ronaldo 341
Sam 450

Publicación traducida automáticamente

Artículo escrito por rohit2sahu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *