博客
关于我
List去除重复数据的五种方式
阅读量:794 次
发布时间:2023-02-05

本文共 3015 字,大约阅读时间需要 10 分钟。

Java ArrayList 中去重的五种方法

1. 使用 LinkedHashSet 删除重复数据

LinkedHashSet 是处理 Java ArrayList 重复数据的理想选择。它不仅能自动删除重复项,还能保持数据的原始顺序。这使得它在数据迁移过程中特别有用。

示例代码

import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedHashSet;public class ArrayListExample {    public static void main(String[] args) {        ArrayList
numbersList = 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]

2. 使用 Java 8 Stream API 去重

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) {        ArrayList
numbersList = 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]

3. 使用 HashSet 判断重复项

HashSet 的特性是无法添加重复数据的。可以利用这一点,结合 ArrayList 本身的循环机制来实现去重。

示例代码

private static void removeDuplicate(List
list) { 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);}

使用方法

List
originalList = Arrays.asList("a", "a", "b", "b", "c");removeDuplicate(originalList);System.out.println(originalList); // [a, a, b, b, c]

4. 使用 List 的 contains 方法手动去重

通过手动遍历列表并使用 contains 方法来检查元素是否已经存在,可以实现去重的功能。这种方法适用于较小的数据量。

示例代码

private static void removeDuplicate(List
list) { ArrayList
result = new ArrayList<>(list.size()); for (String str : list) { if (!result.contains(str)) { result.add(str); } } list.clear(); list.addAll(result);}

使用方法

List
originalList = Arrays.asList("a", "a", "b", "b", "c");removeDuplicate(originalList);System.out.println(originalList); // [a, a, b, b, c]

5. 双重循环手动去重

通过双重循环遍历列表,检查每个元素是否是重复项,并逐一删除。

示例代码

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/

你可能感兴趣的文章
2025年04月10日IT技术领域重点关注焦点
查看>>
List<String>用空串替换null值,并且都加上单引号,并且转为字符串用,分割
查看>>
liunx 下WebBench 安装与压力测试
查看>>
Liunx 多命令/管道符/wc命令/man命令汉化
查看>>
liunx 服务内存消耗100% 怎么处理
查看>>
liunx 网络基础管理
查看>>
liunx-FTP服务器_无需整理
查看>>
liunx上安装MySQL没有默认my.cnf文件解决方案
查看>>
liunx上安装nodejs步骤
查看>>
Liunx中各种压缩包及解压命令
查看>>
liunx命令查看cpu使用率和负载情况
查看>>
liunx快速修改文件夹或文件的属性
查看>>
Liunx挂载nfts盘数据方法
查看>>
liunx查找当前目录文件及子目录文件下的中文并替换
查看>>
liunx环境下的mysql数据库配置文件my.conf内的参数含义
查看>>
liunx目录和文件管理(一)
查看>>
liunx系统中的文件压缩与解压
查看>>
liunx编写启动,kill进程脚本
查看>>
liux的学习笔记
查看>>
live555 testrtspclient客户端建立rtp over tcp 异常问题
查看>>