📜  如何防止在Java ArrayList 中添加重复元素?

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

如何防止在Java ArrayList 中添加重复元素?

有没有想过如何让 ArrayList 独一无二?好吧,在本文中,我们将看到如何防止将重复项添加到我们的 ArrayList 中。如果一个 ArrayList 有三个重复的元素,但最后,只有那些唯一的元素被放入 ArrayList 并且重复被忽略,可以使用下面讨论的各种方法来完成。

例子:

Input : [1, 1, 2, 2, 3, 3, 4, 5, 8]
Output: [1, 2, 3, 4, 5, 8]

Input : [1, 1, 1, 1, 1, 1, 1, 1, 1]
Output: [1]

方法一:contains()方法

  1. 一一添加元素。
  2. 使用 contains 方法检查它们是否存在。
  3. 如果返回 true,则忽略当前元素。
  4. 否则添加元素。

下面是上述方法的实现:

Java
// Java Program to prevent the addition
// of duplicate elements to an ArrayList.
  
// Importing the ArrayList class
import java.util.ArrayList;
  
class GFG {
    public static void main(String[] args)
    {
  
        // Input
        int array[] = { 1, 1, 2, 2, 3, 3, 4, 5, 8 };
  
        // Creating an empty ArrayList
        ArrayList ans = new ArrayList<>();
  
        for (int i : array) {
  
            // Checking if the element is already present or
            // not
            if (!ans.contains(i)) {
                // Adding the element to the ArrayList if it
                // is not present
                ans.add(i);
            }
        }
  
        // Printing the elements of the ArrayList
        for (int i : ans) {
            System.out.print(i + " ");
        }
    }
}


Java
// Java Program to prevent the addition
// of duplicate elements to an ArrayList.
  
// Importing the ArrayList class
import java.util.ArrayList;
  
// Importing the HashSet class
import java.util.HashSet;
  
class GFG {
    public static void main(String[] args)
    {
  
        // Input
        int array[] = { 1, 1, 1, 1, 1, 1, 1, 1 };
  
        // Creating an empty ArrayList
        ArrayList ans = new ArrayList<>();
  
        // Creating an empty HashSet
        HashSet set = new HashSet<>();
  
        for (int i : array) {
  
            // Checking if the element is already present or
            // not
            if (!set.contains(i)) {
                // Adding the element to the ArrayList if it
                // is not present
                ans.add(i);
                // Adding the element to the HashSet if it
                // is not present
                set.add(i);
            }
        }
  
        // Printing the elements of the ArrayList
        for (int i : ans) {
            System.out.print(i + " ");
        }
    }
}


输出
1 2 3 4 5 8

时间复杂度: O(   N 2 ),因为 contains 方法在最坏的情况下可以遍历整个数组

空间复杂度: O(1),因为没有使用额外的空间。

方法二:HashSet

  1. 一一添加元素。
  2. 使用 HashSet 检查它们的存在。
  3. 如果返回 true,则忽略当前元素。
  4. 否则添加元素。

下面是上述方法的实现:

Java

// Java Program to prevent the addition
// of duplicate elements to an ArrayList.
  
// Importing the ArrayList class
import java.util.ArrayList;
  
// Importing the HashSet class
import java.util.HashSet;
  
class GFG {
    public static void main(String[] args)
    {
  
        // Input
        int array[] = { 1, 1, 1, 1, 1, 1, 1, 1 };
  
        // Creating an empty ArrayList
        ArrayList ans = new ArrayList<>();
  
        // Creating an empty HashSet
        HashSet set = new HashSet<>();
  
        for (int i : array) {
  
            // Checking if the element is already present or
            // not
            if (!set.contains(i)) {
                // Adding the element to the ArrayList if it
                // is not present
                ans.add(i);
                // Adding the element to the HashSet if it
                // is not present
                set.add(i);
            }
        }
  
        // Printing the elements of the ArrayList
        for (int i : ans) {
            System.out.print(i + " ");
        }
    }
}
输出
1

时间复杂度: O(n)

空间复杂度: O(n), 因为 HashSet 用于存储遍历的元素。