如何防止在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()方法
- 一一添加元素。
- 使用 contains 方法检查它们是否存在。
- 如果返回 true,则忽略当前元素。
- 否则添加元素。
下面是上述方法的实现:
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
- 一一添加元素。
- 使用 HashSet 检查它们的存在。
- 如果返回 true,则忽略当前元素。
- 否则添加元素。
下面是上述方法的实现:
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 用于存储遍历的元素。