Cómo eliminar duplicados de ArrayList en Java

Dada una ArrayList con valores duplicados, la tarea es eliminar los valores duplicados de esta ArrayList en Java.

Ejemplos:

Input: List = [1, 10, 2, 2, 10, 3, 3, 3, 4, 5, 5]
Output: List = [1, 10, 2, 3, 4, 5]

Input: List = ["G", "e", "e", "k", "s"]
Output: List = ["G", "e", "k", "s"]
  1. Usando iterador

    Acercarse:

    1. Obtenga ArrayList con valores duplicados.
    2. Cree otra ArrayList.
    3. Recorra la primera lista de arreglos y almacene la primera aparición de cada elemento en la segunda lista de arreglos usando el método contains().
    4. La segunda ArrayList contiene los elementos con duplicados eliminados.

    A continuación se muestra la implementación del enfoque anterior:

    // Java program to remove duplicates from ArrayList
      
    import java.util.*;
      
    public class GFG {
      
        // Function to remove duplicates from an ArrayList
        public static <T> ArrayList<T> removeDuplicates(ArrayList<T> list)
        {
      
            // Create a new ArrayList
            ArrayList<T> newList = new ArrayList<T>();
      
            // Traverse through the first list
            for (T element : list) {
      
                // If this element is not present in newList
                // then add it
                if (!newList.contains(element)) {
      
                    newList.add(element);
                }
            }
      
            // return the new list
            return newList;
        }
      
        // Driver code
        public static void main(String args[])
        {
      
            // Get the ArrayList with duplicate values
            ArrayList<Integer>
                list = new ArrayList<>(
                    Arrays
                        .asList(1, 10, 1, 2, 2, 3, 3, 10, 3, 4, 5, 5));
      
            // Print the Arraylist
            System.out.println("ArrayList with duplicates: "
                               + list);
      
            // Remove duplicates
            ArrayList<Integer>
                newList = removeDuplicates(list);
      
            // Print the ArrayList with duplicates removed
            System.out.println("ArrayList with duplicates removed: "
                               + newList);
        }
    }
    Producción:

    ArrayList with duplicates: [1, 10, 1, 2, 2, 3, 3, 10, 3, 4, 5, 5]
    ArrayList with duplicates removed: [1, 10, 2, 3, 4, 5]
    
  2. Uso de LinkedHashSet

    Una mejor manera (tanto por la complejidad del tiempo como por la facilidad de implementación) es eliminar los duplicados de un ArrayList y convertirlo en un Conjunto que no permita duplicados. Por lo tanto, LinkedHashSet es la mejor opción disponible, ya que no permite duplicados y conserva el orden de inserción.

    Acercarse:

    1. Obtenga ArrayList con valores duplicados.
    2. Cree un LinkedHashSet a partir de este ArrayList. Esto eliminará los duplicados.
    3. Convierta este LinkedHashSet nuevamente en Arraylist.
    4. La segunda ArrayList contiene los elementos con duplicados eliminados.

    A continuación se muestra la implementación del enfoque anterior:

    // Java program to remove duplicates from ArrayList
      
    import java.util.*;
      
    public class GFG {
      
        // Function to remove duplicates from an ArrayList
        public static <T> ArrayList<T> removeDuplicates(ArrayList<T> list)
        {
      
            // Create a new LinkedHashSet
            Set<T> set = new LinkedHashSet<>();
      
            // Add the elements to set
            set.addAll(list);
      
            // Clear the list
            list.clear();
      
            // add the elements of set
            // with no duplicates to the list
            list.addAll(set);
      
            // return the list
            return list;
        }
      
        // Driver code
        public static void main(String args[])
        {
      
            // Get the ArrayList with duplicate values
            ArrayList<Integer>
                list = new ArrayList<>(
                    Arrays
                        .asList(1, 10, 1, 2, 2, 3, 10, 3, 3, 4, 5, 5));
      
            // Print the Arraylist
            System.out.println("ArrayList with duplicates: "
                               + list);
      
            // Remove duplicates
            ArrayList<Integer>
                newList = removeDuplicates(list);
      
            // Print the ArrayList with duplicates removed
            System.out.println("ArrayList with duplicates removed: "
                               + newList);
        }
    }
    Producción:

    ArrayList with duplicates: [1, 10, 1, 2, 2, 3, 10, 3, 3, 4, 5, 5]
    ArrayList with duplicates removed: [1, 10, 2, 3, 4, 5]
    
  3. Usando Java 8 Stream.distinct()

    Puede usar el método distinto() de Stream API. El método distinto() devuelve una nueva secuencia sin elementos duplicados en función del resultado devuelto por el método equals(), que se puede utilizar para un procesamiento posterior. El procesamiento real de la canalización de Stream comienza solo después de llamar a métodos de terminal como forEach() o collect().

    Acercarse:

    1. Obtenga ArrayList con valores duplicados.
    2. Cree una nueva lista a partir de este ArrayList.
    3. Usando el método Stream().distinct() que devuelve un flujo de objetos distinto.
    4. convertir este flujo de objetos en Lista

    A continuación se muestra la implementación del enfoque anterior:

    // Java program to remove duplicates from ArrayList
      
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
      
    // Program to remove duplicates from a List in Java 8
    class GFG
    {
        public static void main(String[] args)
        {
            // input list with duplicates
            List<Integer> list = new ArrayList<>(
                Arrays.asList(1, 10, 1, 2, 2, 3, 10, 3, 3, 4, 5, 5));
                // Print the Arraylist
            System.out.println("ArrayList with duplicates: "
                               + list);
      
            // Construct a new list from the set constucted from elements
            // of the original list
            List<Integer> newList = list.stream()
                                          .distinct()
                                          .collect(Collectors.toList());
      
            // Print the ArrayList with duplicates removed
            System.out.println("ArrayList with duplicates removed: "
                               + newList);
        }
    }
    Producción:

    ArrayList with duplicates: [1, 10, 1, 2, 2, 3, 10, 3, 3, 4, 5, 5]
    ArrayList with duplicates removed: [1, 10, 2, 3, 4, 5]
    

Publicación traducida automáticamente

Artículo escrito por RishabhPrabhu 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 *