Cómo eliminar elementos repetidos de un array en Java

Rate this post

Eliminar elementos repetidos de un array en Java es una tarea común que los programadores enfrentan a menudo. Los arrays son estructuras de datos ampliamente utilizadas en Java, pero su manejo puede volverse complicado cuando contienen valores duplicados. Estos elementos repetidos no solo ocupan espacio innecesario, sino que también pueden afectar el rendimiento de tus algoritmos y generar errores difíciles de detectar. En este artículo, aprenderás diferentes métodos para eliminar elementos repetidos de un array java, optimizando así tu código y mejorando la eficiencia de tus aplicaciones. A lo largo del artículo, abordaremos soluciones prácticas y te proporcionaremos ejemplos de código para que puedas implementarlas fácilmente en tus proyectos.

Métodos más comunes para eliminar elementos duplicados en un array de Java

Usando un conjunto (Set) para eliminar duplicados

Una de las formas más sencillas de eliminar duplicados de un array java es utilizando un conjunto (Set). En Java, los conjuntos como HashSet almacenan elementos de manera única, lo que significa que automáticamente eliminarán cualquier valor repetido que se intente agregar. Esta característica hace del Set una solución rápida y eficiente para eliminar duplicados en arrays.

A continuación, se muestra cómo declarar un array en java y utilizar un conjunto (Set) para eliminar duplicados del array:

import java.util.HashSet;
import java.util.Set;

public class EliminarDuplicados {
    public static void main(String[] args) {
        int[] array = {1, 2, 2, 3, 4, 4, 5};
        
        // Crear un Set para almacenar elementos únicos
        Set<Integer> set = new HashSet<>();
        
        // Agregar elementos del array al Set
        for (int num : array) {
            set.add(num);
        }
        
        // Convertir el Set de nuevo a un array
        Integer[] arraySinDuplicados = set.toArray(new Integer[0]);
        
        // Mostrar el array sin duplicados
        for (int num : arraySinDuplicados) {
            System.out.print(num + " ");
        }
    }
}

Explicación:

  • HashSet: El HashSet es una implementación de la interfaz Set que garantiza que los elementos son únicos. Cuando agregamos elementos de un array a este conjunto, cualquier duplicado es automáticamente descartado.
  • Recorrido e inserción: En el bucle for, recorremos el array original y agregamos cada elemento al HashSet. Los duplicados se eliminan automáticamente.
  • Conversión a array: Después de agregar todos los elementos al conjunto, los convertimos nuevamente a un array con el método toArray().
  • Resultado: El array final contiene solo elementos únicos, sin importar cuántas veces se repitieron en el array original.

Este enfoque es eficiente y muy fácil de implementar, aunque tiene la limitación de que no preserva el orden de los elementos en el array original.

Usando un bucle for para eliminar duplicados manualmente

Si no deseas usar colecciones como Set o prefieres controlar el proceso de eliminación manualmente, puedes eliminar duplicados en un array utilizando un bucle. Este enfoque es útil cuando necesitas más flexibilidad o cuando no quieres depender de estructuras de datos adicionales.

En este ejemplo, utilizamos un ArrayList para almacenar los elementos únicos mientras recorremos el array original:

import java.util.ArrayList;

public class EliminarDuplicadosManual {
    public static void main(String[] args) {
        int[] array = {1, 2, 2, 3, 4, 4, 5};
        ArrayList<Integer> list = new ArrayList<>();
        
        for (int num : array) {
            // Solo agregamos el número si no está ya en la lista
            if (!list.contains(num)) {
                list.add(num);
            }
        }
        
        // Convertimos la lista de nuevo a un array
        Integer[] arraySinDuplicados = list.toArray(new Integer[0]);
        
        // Mostrar el array sin duplicados
        for (int num : arraySinDuplicados) {
            System.out.print(num + " ");
        }
    }
}

Explicación:

  • ArrayList: Usamos un ArrayList para agregar elementos de manera dinámica. A diferencia de los arrays, el ArrayList permite agregar elementos de forma eficiente sin tener que preocuparse por el tamaño.
  • Comprobación de duplicados: En el bucle, antes de agregar un número a la lista, verificamos si ya está presente utilizando el método contains(). Si no está, lo agregamos.
  • Conversión a array: Al final, convertimos la lista de vuelta a un array de tipo Integer[] usando el método toArray().
  • Resultado: El array resultante contiene solo los elementos únicos del array original, y puedes mantener el control total sobre el proceso de eliminación.

Este método, aunque funcional, puede ser menos eficiente que usar un Set debido a la necesidad de verificar cada elemento con contains(), lo que resulta en una complejidad adicional.

Usando Java 8 Streams para eliminar duplicados

A partir de Java 8, se introdujo la API de Streams, que proporciona una forma funcional y declarativa de trabajar con colecciones de datos. Para eliminar duplicados en un array java de manera sencilla y elegante, puedes utilizar el método distinct() en un Stream.

Este método es especialmente útil si deseas un código limpio y expresivo, y es altamente eficiente en términos de rendimiento:

import java.util.Arrays;

public class EliminarDuplicadosConStreams {
    public static void main(String[] args) {
        int[] array = {1, 2, 2, 3, 4, 4, 5};
        
        // Usamos Streams para eliminar duplicados
        array = Arrays.stream(array).distinct().toArray();
        
        // Mostrar el array sin duplicados
        for (int num : array) {
            System.out.print(num + " ");
        }
    }
}

Explicación:

  • Streams: El método Arrays.stream(array) convierte el array en un Stream. Luego, el método distinct() elimina los elementos duplicados del Stream.
  • toArray(): Finalmente, el método toArray() convierte el Stream de nuevo a un array.
  • Ventaja: Este enfoque es muy conciso y fácil de entender, lo que lo convierte en una excelente opción para eliminar duplicados de un array en Java, especialmente si estás trabajando con Java 8 o superior.

Los Streams también tienen la ventaja de ser muy eficientes en cuanto a rendimiento cuando se usan correctamente, y son una excelente opción para escribir código limpio y funcional.

Conclusión

En resumen, existen diversas formas de eliminar duplicados en un array java, y cada una ofrece ventajas específicas dependiendo del contexto. Usar un Set, como un HashSet, es una de las formas más sencillas y eficientes de eliminar elementos repetidos de un array java, ya que asegura que no haya duplicados sin necesidad de realizar comprobaciones adicionales. Sin embargo, si se necesita mantener el orden original, el uso de un bucle for con una ArrayList puede ser una opción más adecuada, aunque con un coste de rendimiento mayor. Además, las funcionalidades avanzadas de Java 8, como los Streams, permiten una solución más elegante y declarativa para eliminar duplicados, especialmente útil cuando se trabaja con grandes volúmenes de datos y se busca un código más limpio.

Referencias