📜  如何从Java中的 ArrayList 中删除重复项

📅  最后修改于: 2022-05-13 01:55:52.025000             🧑  作者: Mango

如何从Java中的 ArrayList 中删除重复项

给定一个具有重复值的 ArrayList,任务是在Java中从这个 ArrayList 中删除重复值。

例子:

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. 使用迭代器

    方法:

    1. 获取具有重复值的 ArrayList。
    2. 创建另一个 ArrayList。
    3. 遍历第一个数组列表并使用 contains() 方法将每个元素的第一次出现存储到第二个数组列表中。
    4. 第二个 ArrayList 包含删除了重复项的元素。

    下面是上述方法的实现:

    // Java program to remove duplicates from ArrayList
      
    import java.util.*;
      
    public class GFG {
      
        // Function to remove duplicates from an ArrayList
        public static  ArrayList removeDuplicates(ArrayList list)
        {
      
            // Create a new ArrayList
            ArrayList newList = new ArrayList();
      
            // 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
                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
                newList = removeDuplicates(list);
      
            // Print the ArrayList with duplicates removed
            System.out.println("ArrayList with duplicates removed: "
                               + newList);
        }
    }
    
    输出:
    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. 使用 LinkedHashSet

    更好的方法(时间复杂度和易于实现)是从 ArrayList 中删除重复项,是将其转换为不允许重复项的 Set。因此 LinkedHashSet 是最好的选择,因为它不允许重复,并且它保留了插入顺序。

    方法:

    1. 获取具有重复值的 ArrayList。
    2. 从此 ArrayList 创建一个 LinkedHashSet。这将删除重复项
    3. 将此 LinkedHashSet 转换回 Arraylist。
    4. 第二个 ArrayList 包含删除了重复项的元素。

    下面是上述方法的实现:

    // Java program to remove duplicates from ArrayList
      
    import java.util.*;
      
    public class GFG {
      
        // Function to remove duplicates from an ArrayList
        public static  ArrayList removeDuplicates(ArrayList list)
        {
      
            // Create a new LinkedHashSet
            Set 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
                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
                newList = removeDuplicates(list);
      
            // Print the ArrayList with duplicates removed
            System.out.println("ArrayList with duplicates removed: "
                               + newList);
        }
    }
    
    输出:
    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. 使用Java 8 Stream.distinct()

    您可以使用 Stream API 中的 distinct() 方法。 distinct() 方法根据 equals() 方法返回的结果返回一个没有重复元素的新 Stream,可用于进一步处理。 Stream 管道的实际处理只有在调用诸如 forEach() 或 collect() 之类的终端方法后才开始。

    方法:

    1. 获取具有重复值的 ArrayList。
    2. 从此 ArrayList 创建一个新列表。
    3. 使用返回不同对象流的 Stream().distinct() 方法。
    4. 将此对象流转换为 List

    下面是上述方法的实现:

    // 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 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 newList = list.stream()
                                          .distinct()
                                          .collect(Collectors.toList());
      
            // Print the ArrayList with duplicates removed
            System.out.println("ArrayList with duplicates removed: "
                               + newList);
        }
    }
    
    输出:
    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]