Listado completo de tutoriales
75 - Colecciones: HashSet, TreeSet y LinkedHashSet |
La diferencia fundamental entre las clases HashSet, TreeSet, LinkedHashSet con respecto a las listas ArrayList y LinkedList es que no puede haber elementos repetidos en las colecciones que implementan la interfaz Set.
A su vez se han creado estas tres clases que tienen pequeñas diferencias entre una y otras:
El siguiente programa muestra la sintaxis para crear objetos de estas clases y los métodos principales que disponen:
import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; import java.util.TreeSet; public class PruebaSet { public static void main(String[] args) { Set<Integer> conjunto1 = new HashSet<Integer>(); conjunto1.add(20); conjunto1.add(10); conjunto1.add(1); conjunto1.add(5); // El valor 20 no se inserta en el conjunto ya que se encuentra repetido conjunto1.add(20); // La impresión no asegura un orden específico for (int elemento : conjunto1) System.out.print(elemento + " - "); System.out.println(); Set<Integer> conjunto2 = new TreeSet<Integer>(); conjunto2.add(20); conjunto2.add(10); conjunto2.add(1); conjunto2.add(5); // El valor 20 no se inserta en el conjunto ya que se encuentra repetido conjunto2.add(20); // Los elementos se muestran de menor a mayor for (int elemento : conjunto2) System.out.print(elemento + " - "); System.out.println(); Set<Integer> conjunto3 = new LinkedHashSet<Integer>(); conjunto3.add(20); conjunto3.add(10); conjunto3.add(1); conjunto3.add(5); // El valor 20 no se inserta en el conjunto ya que se encuentra repetido conjunto3.add(20); // Los elementos se muestran en el orden que se insertaron for (int elemento : conjunto3) System.out.print(elemento + " - "); System.out.println(); } }
El resultado de ejecutar el programa es similar a:
Los métodos más comunes que tienen estas clases son:
lista1.remove(20);
if (conjunto1.contains(20)) ...
Más datos podemos conseguir visitando la documentación oficial de las clases HashSet, TreeSet y LinkedHashSet.
Generar una lista de 10 valores enteros comprendidos entre 1 y 100. Validar que no se repitan, para esto utilizar la ayuda de una de las colecciones de conjuntos visto en este concepto.
import java.util.Set; import java.util.TreeSet; public class Lista10Valores { public static void main(String[] args) { Set<Integer> conjunto1 = new TreeSet<Integer>(); while (conjunto1.size() < 10) { int aleatorio = (int) (Math.random() * 100) + 1; conjunto1.add(aleatorio); } System.out.println(conjunto1); } }
Dentro de un while mientras el objeto 'conjunto1' tenga menos de 10 elementos, procedemos a generar otro valor aleatorio y lo agregamos al conjunto, como sabemos si el valor ya existe en el conjunto1 luego el método 'add' no lo agrega:
while (conjunto1.size() < 10) { int aleatorio = (int) (Math.random() * 100) + 1; conjunto1.add(aleatorio); }
Podemos recorrer el conjunto para imprimirlo mediante un for o inclusive utilizar el método 'println':
System.out.println(conjunto1);