介绍
在 Java 中,ArrayList
可以存储重复的元素。如果我们想要移除重复项并只保留唯一的元素,我们需要采取特定的步骤。在这个实验中,我们将学习如何通过两种方式从 ArrayList
中移除重复项:使用 HashSet
和使用 Stream
的 distinct()
方法。
在 Java 中,ArrayList
可以存储重复的元素。如果我们想要移除重复项并只保留唯一的元素,我们需要采取特定的步骤。在这个实验中,我们将学习如何通过两种方式从 ArrayList
中移除重复项:使用 HashSet
和使用 Stream
的 distinct()
方法。
创建一个 ArrayList
并向其中添加一些元素。以下是一个示例:
import java.util.ArrayList;
public class RemoveDuplicates {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(1);
arrayList.add(4);
arrayList.add(2);
System.out.println("Original ArrayList: " + arrayList);
}
}
要在终端中运行代码,请导航到包含文件的目录并输入以下命令:
javac RemoveDuplicates.java && java RemoveDuplicates
要使用 HashSet
移除重复项,首先创建一个 HashSet
并将 ArrayList
传递给它的构造函数。由于 HashSet
只包含唯一元素,因此这会消除所有重复项。然后将生成的 HashSet
转换回 ArrayList
。
import java.util.ArrayList;
import java.util.HashSet;
public class RemoveDuplicates {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(1);
arrayList.add(4);
arrayList.add(2);
System.out.println("Original ArrayList: " + arrayList);
// Remove duplicates
HashSet<Integer> hashSet = new HashSet<>(arrayList);
arrayList.clear();
arrayList.addAll(hashSet);
System.out.println("ArrayList with duplicates removed using HashSet: " + arrayList);
}
}
Stream
的 distinct()
方法移除重复项要使用 Stream
API 移除重复项,首先使用 ArrayList
的 stream()
方法创建一个 Stream
。然后使用 distinct()
方法返回一个包含唯一元素的新流。最后,使用 collect()
方法将流元素作为 ArrayList
返回。
import java.util.ArrayList;
public class RemoveDuplicates {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(1);
arrayList.add(4);
arrayList.add(2);
System.out.println("Original ArrayList: " + arrayList);
// Remove duplicates
arrayList = (ArrayList<Integer>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("ArrayList with duplicates removed using Stream: " + arrayList);
}
}
要测试这两种方法,请在终端中编译并运行这两个代码示例。
javac RemoveDuplicates.java && java RemoveDuplicates
为了更方便地在程序中从多个 ArrayList
中移除重复项,我们可以创建一个函数。以下是一个示例:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.stream.Collectors;
public class RemoveDuplicates {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(1);
arrayList1.add(2);
arrayList1.add(3);
arrayList1.add(1);
arrayList1.add(4);
arrayList1.add(2);
System.out.println("Original ArrayList: " + arrayList1);
ArrayList<Integer> arrayList2 = new ArrayList<>();
arrayList2.add(5);
arrayList2.add(6);
arrayList2.add(1);
arrayList2.add(7);
arrayList2.add(5);
System.out.println("Original ArrayList: " + arrayList2);
// 使用 HashSet 移除重复项
removeDuplicatesUsingHashSet(arrayList1);
removeDuplicatesUsingHashSet(arrayList2);
// 使用 Stream 移除重复项
removeDuplicatesUsingStream(arrayList1);
removeDuplicatesUsingStream(arrayList2);
}
public static void removeDuplicatesUsingHashSet(ArrayList<Integer> arrayList) {
HashSet<Integer> hashSet = new HashSet<>(arrayList);
arrayList.clear();
arrayList.addAll(hashSet);
System.out.println("ArrayList with duplicates removed using HashSet: " + arrayList);
}
public static void removeDuplicatesUsingStream(ArrayList<Integer> arrayList) {
arrayList = (ArrayList<Integer>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("ArrayList with duplicates removed using Stream: " + arrayList);
}
}
要在终端中运行代码,请导航到包含文件的目录并输入以下命令:
javac RemoveDuplicates.java && java RemoveDuplicates
removeDuplicatesUsingHashSet()
函数仅适用于 ArrayList<Integer>
。为了使函数更加灵活,我们可以将数据类型修改为 ArrayList<T>
。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.stream.Collectors;
public class RemoveDuplicates<T> {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(1);
arrayList1.add(2);
arrayList1.add(3);
arrayList1.add(1);
arrayList1.add(4);
arrayList1.add(2);
System.out.println("Original ArrayList: " + arrayList1);
ArrayList<String> arrayList2 = new ArrayList<>();
arrayList2.add("Hello");
arrayList2.add("World");
arrayList2.add("Java");
arrayList2.add("Hello");
arrayList2.add("Mars");
System.out.println("Original ArrayList: " + arrayList2);
// 使用 HashSet 移除重复项
removeDuplicatesUsingHashSet(arrayList1);
removeDuplicatesUsingHashSet(arrayList2);
// 使用 Stream 移除重复项
removeDuplicatesUsingStream(arrayList1);
removeDuplicatesUsingStream(arrayList2);
}
public static <T> void removeDuplicatesUsingHashSet(ArrayList<T> arrayList) {
HashSet<T> hashSet = new HashSet<>(arrayList);
arrayList.clear();
arrayList.addAll(hashSet);
System.out.println("ArrayList with duplicates removed using HashSet: " + arrayList);
}
public static <T> void removeDuplicatesUsingStream(ArrayList<T> arrayList) {
arrayList = (ArrayList<T>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("ArrayList with duplicates removed using Stream: " + arrayList);
}
}
要在终端中运行代码,请导航到包含文件的目录并输入以下命令:
javac RemoveDuplicates.java && java RemoveDuplicates
为了使我们的程序更具交互性,我们可以允许用户输入他们想要添加到 ArrayList
的整数。以下是一个示例:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
import java.util.stream.Collectors;
public class RemoveDuplicates<T> {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
int input = getUserInput();
while (input != -1) {
arrayList1.add(input);
input = getUserInput();
}
System.out.println("Original ArrayList: " + arrayList1);
// 使用 HashSet 移除重复项
removeDuplicatesUsingHashSet(arrayList1);
// 使用 Stream 移除重复项
removeDuplicatesUsingStream(arrayList1);
}
public static <T> void removeDuplicatesUsingHashSet(ArrayList<T> arrayList) {
HashSet<T> hashSet = new HashSet<>(arrayList);
arrayList.clear();
arrayList.addAll(hashSet);
System.out.println("ArrayList with duplicates removed using HashSet: " + arrayList);
}
public static <T> void removeDuplicatesUsingStream(ArrayList<T> arrayList) {
arrayList = (ArrayList<T>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("ArrayList with duplicates removed using Stream: " + arrayList);
}
public static int getUserInput() {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter an integer to add to the ArrayList, or -1 to quit: ");
if (scanner.hasNextInt()) {
return scanner.nextInt();
}
return -1;
}
}
要在终端中运行代码,请导航到包含文件的目录并输入以下命令:
javac RemoveDuplicates.java && java RemoveDuplicates
在本实验中,我们学习了两种从 ArrayList
中移除重复项的方法:使用 HashSet
和使用 Stream
的 distinct()
方法。我们还创建了一个函数,以便更轻松地从程序中的多个 ArrayList
中移除重复项,修改了数据类型以使函数更加灵活,并允许用户输入他们想要添加到 ArrayList
的整数。