本文共 3015 字,大约阅读时间需要 10 分钟。
LinkedHashSet 是处理 Java ArrayList 重复数据的理想选择。它不仅能自动删除重复项,还能保持数据的原始顺序。这使得它在数据迁移过程中特别有用。
import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedHashSet;public class ArrayListExample { public static void main(String[] args) { ArrayListnumbersList = new ArrayList<>(Arrays.asList( 1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8 )); System.out.println("原始列表:" + numbersList); LinkedHashSet hashSet = new LinkedHashSet<>(numbersList); ArrayList listWithoutDuplicates = new ArrayList<>(hashSet); System.out.println("去重后的列表:" + listWithoutDuplicates); }}
原始列表:[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]去重后的列表:[1, 2, 3, 4, 5, 6, 7, 8]
Java 8 引入了 Stream API,提供了更加简洁的去重方法。通过 stream().distinct()
可以轻松实现去重操作。
import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class ArrayListExample { public static void main(String[] args) { ArrayListnumbersList = new ArrayList<>(Arrays.asList( 1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8 )); System.out.println("原始列表:" + numbersList); List listWithoutDuplicates = numbersList.stream() .distinct() .collect(Collectors.toList()); System.out.println("去重后的列表:" + listWithoutDuplicates); }}
原始列表:[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]去重后的列表:[1, 2, 3, 4, 5, 6, 7, 8]
HashSet 的特性是无法添加重复数据的。可以利用这一点,结合 ArrayList 本身的循环机制来实现去重。
private static void removeDuplicate(Listlist) { HashSet set = new HashSet<>(list.size()); ArrayList result = new ArrayList<>(list.size()); for (String str : list) { if (set.add(str)) { result.add(str); } } list.clear(); list.addAll(result);}
ListoriginalList = Arrays.asList("a", "a", "b", "b", "c");removeDuplicate(originalList);System.out.println(originalList); // [a, a, b, b, c]
通过手动遍历列表并使用 contains
方法来检查元素是否已经存在,可以实现去重的功能。这种方法适用于较小的数据量。
private static void removeDuplicate(Listlist) { ArrayList result = new ArrayList<>(list.size()); for (String str : list) { if (!result.contains(str)) { result.add(str); } } list.clear(); list.addAll(result);}
ListoriginalList = Arrays.asList("a", "a", "b", "b", "c");removeDuplicate(originalList);System.out.println(originalList); // [a, a, b, b, c]
通过双重循环遍历列表,检查每个元素是否是重复项,并逐一删除。
for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.size(); j++) { if (i != j && list.get(i).equals(list.get(j))) { list.remove(list.get(j)); } }}
这种方法可能会导致列表大小在循环过程中发生变化,影响性能。因此,通常不推荐在实际应用中使用。
通过以上五种方法,可以根据具体需求选择最适合的去重方式。每种方法都有其优缺点,选择时需综合考虑性能、代码复杂度和数据规模。
转载地址:http://fkufk.baihongyu.com/