Saltar la navegación

3.3.- Conjuntos (IV).

¿Cómo podría copiar los elementos de un conjunto de uno a otro? ¿Hay que usar un bucle for y recorrer toda la lista para ello? ¡Qué va! Para facilitar esta tarea, los conjuntos, y las colecciones en general, facilitan un montón de operaciones para poder combinar los datos de varias colecciones. Ya se vieron en un apartado anterior, aquí simplemente vamos poner un ejemplo de su uso.

Partimos del siguiente ejemplo, en el que hay dos colecciones de diferente tipo, cada una con 4 números enteros:

Imagen que muestra dos conjuntos, A y B, donde se muestran los elementos en común (5 y 7) y los elementos propios de cada conjunto (9 y 19 para A, y 20 y 10 para B).
Salvador Romero Villegas (CC BY-NC)
TreeSet<Integer> A= new TreeSet<Integer>();

A.add(9); A.add(19); A.add(5); A.add(7); // Elementos del conjunto A: 9, 19, 5 y 7

LinkedHashSet<Integer> B= new LinkedHashSet<Integer>();

B.add(10); B.add(20); B.add(5); B.add(7); // Elementos del conjunto B: 10, 20, 5 y 7

En el ejemplo anterior, el literal de número se convierte automáticamente a la clase envoltorio Integer sin tener que hacer nada, lo cual es una ventaja. Veamos las formas de combinar ambas colecciones:

Tipos de combinaciones.
Combinación. Código. Elementos finales del conjunto A.
Unión. Añadir todos los elementos del conjunto B en el conjunto A.
A.addAll(B)

Todos los del conjunto A, añadiendo los del B, pero sin repetir los que ya están: 5, 7, 9, 10, 19 y 20.

Imagen que muestra dos conjuntos unidos; A , con los elementos 9, 19, 5 y 7, y B con los elementos 5, 7, 20 y 10; dando lugar a un nuevo conjunto con los elementos 9, 19, 5, 7, 20 y 10.
Ministerio de Educación y FP (CC BY-NC)
Diferencia. Eliminar los elementos del conjunto B que puedan estar en el conjunto A.
A.removeAll(B)

Todos los elementos del conjunto A, que no estén en el conjunto B: 9, 19.

Imagen que muestra la diferencia de dos conjuntos; A , con los elementos 9, 19, 5 y 7, y B con los elementos 5, 7, 20 y 10; dando lugar a un nuevo conjunto con los elementos 9 y 19.
Ministerio de Educación y FP (CC BY-NC)
Intersección. Retiene los elementos comunes a ambos conjuntos.
A.retainAll(B)

Todos los elementos del conjunto A, que también están en el conjunto B: 5 y 7.

Imagen que muestra la intersección de dos conjuntos; A , con los elementos 9, 19, 5 y 7, y B con los elementos 5, 7, 20 y 10; dando lugar a un nuevo conjunto con los elementos 5 y 7.
Ministerio de Educación y FP (CC BY-NC)

Recuerda, estas operaciones son comunes a todas las colecciones.

Para saber más

Puede que no recuerdes cómo era eso de los conjuntos, y dada la íntima relación de las colecciones con el álgebra de conjuntos, es recomendable que repases cómo era aquello, con el siguiente artículo de la Wikipedia.

Álgebra de conjuntos.

Autoevaluación

Pregunta

Tienes un HashSet llamado vocales que contiene los elementos "a", "e", "i", "o", "u", y otro, llamado vocales_fuertes con los elementos "a", "e" y "o". ¿De qué forma podríamos sacar una lista con las denominadas vocales débiles (que son aquellas que no son fuertes)?

Respuestas

vocales.retainAll (vocales_fuertes);

vocales.removeAll(vocales_fuertes);

No es posible hacer esto con HashSet, solo se puede hacer con TreeSet o LinkedHashSet.

Retroalimentación