Ordenar un conjunto en Java

Hiten Kanwar 30 enero 2023 18 octubre 2021 Java Java Set
  1. Usar una lista para mostrar un conjunto ordenado en Java
  2. Utilice el TreeSet para mostrar un conjunto ordenado en Java
  3. Utilice la función stream() para mostrar un conjunto ordenado en Java
Ordenar un conjunto en Java

En Java, los conjuntos o HashSet se utilizan comúnmente para acceder de forma aleatoria a los elementos, ya que se accede a los elementos de la tabla hash mediante códigos hash. El código hash es una identidad única que nos ayuda a identificar los elementos de la tabla hash.

Un HashSet es una colección desordenada. Un conjunto en Java no tiene métodos de acceso aleatorio (como get(i) donde i es un índice de ese elemento), que son requisitos esenciales para los algoritmos de clasificación. En pocas palabras, como HashSet tiene sus elementos colocados aleatoriamente, no ofrece ninguna garantía para ordenar sus elementos debido a un orden indefinido.

Por lo tanto, necesitamos pensar un poco fuera de la caja para ordenar un conjunto en Java. Discutiremos algunos métodos para convertirlo a una estructura diferente y ordenarlo.

Usar una lista para mostrar un conjunto ordenado en Java

Una forma de ordenar un HashSet es primero convertirlo en una lista y luego ordenarlo.

Agregaremos los elementos del conjunto a la lista y luego usaremos la función sort() para ordenarlos.

Por ejemplo,

import java.util.*;
public class example{

     public static void main(String[] args) {
        HashSet<Integer> number = new HashSet<>();

        // Using add() method
        number.add(3);
        number.add(6);
        number.add(4);
        
        // converting HashSet to arraylist
        ArrayList<Integer> al = new ArrayList<>(number);
        
        // sorting the list and then printing
        Collections.sort(al);
        System.out.println("Sorted list: ");
        for(int x: al) {
            System.out.print(x + " ");
        }
    }
}

Producción:

Sorted list: 
3 4 6 

Utilice el TreeSet para mostrar un conjunto ordenado en Java

La clase TreeSet de la interfaz Collections nos proporciona la funcionalidad de estructura de datos de árbol. Podemos convertir el HashSet en TreeSet cuando iteramos a través de esta colección. Los elementos se extraen en un orden bien definido.

TreeSet implementa la interfaz NavigableSet, que extiende SortedSet, que extiende aún más la interfaz Set.

Vea el siguiente ejemplo.

import java.util.*;
public class example{
     public static void main(String[] args) {
        HashSet<Integer> number = new HashSet<>();

        // Using add() method
        number.add(3);
        number.add(6);
        number.add(4);

        // TreeSet gets the value of hashSet
        TreeSet myTreeSet = new TreeSet();
        myTreeSet.addAll(number);
        System.out.println(myTreeSet);
    }
}

Producción:

[3, 4, 6]

Utilice la función stream() para mostrar un conjunto ordenado en Java

Hay una forma concisa de resolver este problema utilizando el método stream(). La API de transmisión se introdujo en Java 8 y no es una estructura de datos en sí misma. Sin embargo, puede tomar objetos de diferentes colecciones y mostrarlos de la forma deseada según los métodos de canalización.

Usaremos el método sorted() para mostrar la secuencia final de una manera ordenada para nuestro ejemplo.

Vea el código a continuación.

import java.util.*;
public class example {
    public static void main(String []args){
        // creating hashset hs
        HashSet<Integer> hs = new HashSet<>();
        
        // Using add() method to add elements to hs
        hs.add(20);
        hs.add(4);
        hs.add(15);
        
        // before sorting hs
        hs.forEach(System.out::println); 
        System.out.println(); // extra line
        // after sorting hs
        hs.stream().sorted().forEach(System.out::println); // yes
     }
}

Producción:

20
4
15

4
15
20

Artículo relacionado - Java Set

  • Convertir ArrayList a Set en Java
  • Conversión de Set a ArrayList en Java
  • Encontrar una intersección de conjuntos en Java
  • Iterar a través del conjunto en Java