博客
关于我
List 集合去重的 3 种方法
阅读量:792 次
发布时间:2023-02-05

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

在Java项目中处理集合中的重复对象是一个常见问题,尤其是在没有主键的情况下。以下是一些有效的解决方案:

方法一:传统的两层循环方法

这种方法虽然效率较低,但简单易懂,适合小规模的数据处理。

public static void main(String[] args) {    List
penBeanList = new ArrayList<>(); penBeanList.add(new PenBean("铅笔", "black")); penBeanList.add(new PenBean("铅笔", "white")); penBeanList.add(new PenBean("铅笔", "black")); penBeanList.add(new PenBean("中性笔", "white")); penBeanList.add(new PenBean("中性笔", "white")); List
newPenBeanList = new ArrayList<>(); for (PenBean penBean : penBeanList) { boolean isSame = false; for (PenBean newPenBean : newPenBeanList) { if (penBean.getType().equals(newPenBean.getType()) && penBean.getColor().equals(newPenBean.getColor())) { isSame = true; break; } } if (!isSame) { newPenBeanList.add(penBean); } } System.out.println("=========新数据======"); for (PenBean penBean : newPenBeanList) { System.out.println(penBean.toString()); }}

方法二:利用List的contains方法

在使用contains()方法之前,确保PenBean类重写了equals()方法:

@Overridepublic boolean equals(Object o) {    if (this == o) return true;    if (o == null || getClass() != o.getClass()) return false;    PenBean penBean = (PenBean) o;    return Objects.equals(type, penBean.type) && Objects.equals(color, penBean.color);}

然后在主函数中使用contains()进行去重:

public static void main(String[] args) {    List
penBeanList = new ArrayList<>(); // 添加重复元素 // ... List
newPenBeanList = new ArrayList<>(); for (PenBean penBean : penBeanList) { if (!newPenBeanList.contains(penBean)) { newPenBeanList.add(penBean); } } // 输出结果 System.out.println("=========新数据======"); for (PenBean penBean : newPenBeanList) { System.out.println(penBean.toString()); }}

方法三:Java 8中的流式操作

利用Java 8的流式写法进行去重:

public static void main(String[] args) {    List
penBeanList = new ArrayList<>(); // 添加重复元素 // ... List
newPenBeanList = penBeanList.stream() .distinct() .collect(Collectors.toList()); // 输出结果 System.out.println("=========新数据======"); for (PenBean penBean : newPenBeanList) { System.out.println(penBean.toString()); }}

方法四:使用HashSet进行去重

HashSet集合天然支持唯一性,可以直接添加元素:

public static void main(String[] args) {    List
penBeanList = new ArrayList<>(); // 添加重复元素 // ... Set
set = new HashSet<>(penBeanList); List
newPenBeanList = new ArrayList<>(set); // 输出结果 System.out.println("=========新数据======"); for (PenBean penBean : newPenBeanList) { System.out.println(penBean.toString()); }}

选择方法的考虑因素

  • 效率:流式操作和HashSet的效率较高,适合大规模数据。
  • 简洁性:流式操作代码简洁,易于阅读和维护。
  • 特定需求:如果需要保持原集合的顺序,使用ArrayList并手动去重或使用HashSet后再转换为ArrayList。

确保PenBean类的equals()hashCode()方法被正确重写,以确保集合操作能够正确识别重复元素。根据项目需求选择合适的方法,以确保性能和正确性。

转载地址:http://czufk.baihongyu.com/

你可能感兴趣的文章
Linux工作笔记038---CentOS8.2安装Nginx_测试通过
查看>>
Linux工作笔记038---Centos下Linux下解决root用户Operation not permitted
查看>>
Linux工作笔记040---Centos8.2安装mysql5.7.18_已经测试成功
查看>>
Linux带给了我什么?
查看>>
Linux常用vi命令
查看>>
Linux常用命令
查看>>
Linux常用命令
查看>>
linux常用命令-grep
查看>>
linux常用命令100个(转)
查看>>
linux常用命令合集及常用工具指令集
查看>>
Linux常用命令详解与示例
查看>>
Linux常用嗅探工具(1):fping命令
查看>>
Linux常见操作命令整理
查看>>
linux开机启动脚本制作
查看>>
linux打印函数是哪个文件夹,如何从linux上的文件夹中找到一个函数
查看>>
Linux操作系统安装与gcc和内核升级
查看>>
Linux文件内容查询命令
查看>>
linux文件属性
查看>>
Linux文件查找命令find,xargs详述【转】
查看>>
linux文件目录解释
查看>>