如何从Java ArrayList中删除重复的元素
时间:2020-01-09 10:35:01 来源:igfitidea点击:
这篇文章展示了从Java中从ArrayList中删除重复元素的不同方法。
Java中的ArrayList旨在存储重复的元素,因为HashSet仅存储唯一的元素,使用Java中的HashSet的功能,我们可以从ArrayList中删除重复项。
唯一的问题是HashSet是无序集合,因此插入顺序不会在HashSet中维护。如果要保留列表的插入顺序,则可以使用LinkedHashSet从ArrayList中删除重复项。 Java中的LinkedHashSet维护插入顺序。让我们看看同时使用这两个集合的代码示例。
使用HashSet从ArrayList中删除重复的元素
import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class DuplicateListRemoval { public static void main(String[] args) { List<String> carList = new ArrayList<String>(); carList.add("Audi"); carList.add("BMW"); carList.add("Jaguar"); carList.add("BMW"); carList.add("Mini Cooper"); System.out.println("List with duplicates- " + carList); // Creating set using the List Set<String> carSet = new HashSet<String>(carList); carList.clear(); //Adding set to List to get a new list carList.addAll(carSet); System.out.println("List after removing duplicates- " + carList); } }
输出:
List with duplicates- [Audi, BMW, Jaguar, BMW, Mini Cooper] List after removing duplicates- [Audi, Jaguar, Mini Cooper, BMW]
从输出中可以看到,重复项已从列表中删除,但未维护插入顺序。这使我们进入使用LinkedHashSet删除重复元素的下一个程序。
使用LinkedHashSet从ArrayList中删除重复的元素
import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; public class DuplicateListRemoval { public static void main(String[] args) { List<String> carList = new ArrayList<String>(); carList.add("Audi"); carList.add("BMW"); carList.add("Jaguar"); carList.add("BMW"); carList.add("Mini Cooper"); System.out.println("List with duplicates- " + carList); // Creating set using the List Set<String> carSet = new LinkedHashSet<String>(carList); carList.clear(); //Adding set to List to get a new list carList.addAll(carSet); System.out.println("List after removing duplicates- " + carList); } }
输出:
List with duplicates- [Audi, BMW, Jaguar, BMW, Mini Cooper] List after removing duplicates- [Audi, BMW, Jaguar, Mini Cooper]
从输出中可以看到,重复项从列表中删除,插入顺序也得到维护。
使用Stream API从ArrayList中删除重复的元素
从Java 8开始,我们可以使用Stream API从列表中删除重复项。在Stream API中,存在一个distinct()方法,该方法返回由该流的不同元素组成的流。
import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class DuplicateListRemoval { public static void main(String[] args) { List<String> carList = new ArrayList<String>(); carList.add("Audi"); carList.add("BMW"); carList.add("Jaguar"); carList.add("BMW"); carList.add("Mini Cooper"); System.out.println("List with duplicates- " + carList); // Using Stream carList = carList.stream().distinct().collect(Collectors.toList()); System.out.println("List after removing duplicates- " + carList); } }
输出:
List with duplicates- [Audi, BMW, Jaguar, BMW, Mini Cooper] List after removing duplicates- [Audi, BMW, Jaguar, Mini Cooper]
如我们所见,重复项已从ArrayList中删除,插入顺序也得到了维护。