如何从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中删除,插入顺序也得到了维护。