如何从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"]
使用迭代器
方法:
- 获取具有重复值的 ArrayList。
- 创建另一个 ArrayList。
- 遍历第一个数组列表并使用 contains() 方法将每个元素的第一次出现存储到第二个数组列表中。
- 第二个 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]
使用 LinkedHashSet
更好的方法(时间复杂度和易于实现)是从 ArrayList 中删除重复项,是将其转换为不允许重复项的 Set。因此 LinkedHashSet 是最好的选择,因为它不允许重复,并且它保留了插入顺序。
方法:
- 获取具有重复值的 ArrayList。
- 从此 ArrayList 创建一个 LinkedHashSet。这将删除重复项
- 将此 LinkedHashSet 转换回 Arraylist。
- 第二个 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]
使用Java 8 Stream.distinct()
您可以使用 Stream API 中的 distinct() 方法。 distinct() 方法根据 equals() 方法返回的结果返回一个没有重复元素的新 Stream,可用于进一步处理。 Stream 管道的实际处理只有在调用诸如 forEach() 或 collect() 之类的终端方法后才开始。
方法:
- 获取具有重复值的 ArrayList。
- 从此 ArrayList 创建一个新列表。
- 使用返回不同对象流的 Stream().distinct() 方法。
- 将此对象流转换为 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]