博客
关于我
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(11):设置固定ip
查看>>
Linux(12):上传下载命令rz和sz
查看>>
Linux(13):压缩和解压缩命令
查看>>
Linux(14):端口的开放与管理
查看>>
Linux(1):文件和目录
查看>>
Linux(2):Linux命令概述
查看>>
Linux(3):Linux命令-文件管理
查看>>
Linux(4):Linux命令-用户、权限管理
查看>>
Linux(5):Linux命令-系统管理
查看>>
Linux(6):Linux网络命令
查看>>
Linux(7):VIM的使用
查看>>
Linux(8):安装JDK
查看>>
Linux(9):安装Tomcat
查看>>
Linux(centos7)上安装最新版R3.4.1
查看>>
Linux(CentOS)安装 Nginx
查看>>
Linux(RadHat)基础学习—软件安装
查看>>
linux(ubuntu)中crontab定时器命令详解 以及windows中定时器
查看>>
linux(乌班图)修改apt下载源
查看>>
Linux,启动java程序的通用脚本sh
查看>>
Linux:-bash: pip: command not found pip
查看>>