list去重方法

news/2025/3/20 15:28:09/文章来源:https://www.cnblogs.com/Mosey/p/18783108

List去重总结

List和Set区别

!>Java中的集合分三大类,分别是Set(集),List(列表)以及Map(映射)

1、List和Set都是接口继承于Collection接口。

2、List有序可重复的。而Set无序不可重复的

3、List接口的三个实现类:LinkedList,ArrayList,Vector ,Set接口的两个实现类:HashSet,LinkedHashSet

4、List适合经常追加数据,插入,删除数据。但随机取数效率比较低。

5、Set适合经常地随机储存,插入,删除。但是在遍历时效率比较低。

去重方法

1、运用Set无序不重复特性

ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1,2,2,3,3,3,4,4));
HashSet<Integer> set = new HashSet<Integer>(list1.size());  
List<Integer> newlist= new ArrayList<Integer>(list1.size());  
for (Integer it : list1) {if (set.add(it)) {   //运用Set无序不可重复特点来判断newlist.add(it);  //把不重复的数据添加到新的newlist}
}
list1.clear();   //循环后把原list1清空
list1.addAll(newlist);  //再把新的newlist全部加到list1中去,得到去重后的list1
System.out.println(list1);  //[1, 2, 3, 4]

2、list转set自动去重

//list2转set的时候去重,set再转newlist2
LinkedList<Integer> list2= new LinkedList<>(Arrays.asList(1,2,2,3,3,3,4,4));LinkedHashSet<Integer> lhset= new LinkedHashSet<>(list2);LinkedList<Integer> newlist2= new LinkedList<>(lhset);System.out.println(newlist2);//[1, 2, 3, 4]

3、遍历list3,用contains判断有重复的就不存放到newlist3中去。循环结束后把list3清空,再把newlist3全部放进去,得到去重后的list3

// 
LinkedList<Integer> list3= new LinkedList<>(Arrays.asList(1,2,2,3,3,3,4,4));
LinkedList<Integer> newlist3=new LinkedList<>();
for (int i = 0; i < list3.size(); i++) {if(!newlist3.contains(list3.get(i))){newlist3.add(list3.get(i));}
}
list3.clear();
list3.addAll(newlist3);
System.out.println(list3); //[1, 2, 3, 4]

4、用Stream流的distinct方法去重

 LinkedList<Integer> list4= new LinkedList<>(Arrays.asList(1,2,2,3,3,3,4,4));Stream<Integer> liststream= list4.stream().distinct();// distinct.forEach(res-> System.out.println(res));  //输出每一项    
//重复后的liststream转成newlist4
List<Integer> newlist4= liststream.collect(Collectors.toList());  System.out.println(newlist4);//[1, 2, 3, 4]

5、如果List中存放的是Entity类对象,要根据某个字段去重,可考虑TreeSet去重

//实体类
public class Student {private String name;private int age;private double score;......       //省略get、set、构造等一系列方法}List<Student> students = Arrays.asList(new Student("小明", 20, 91),new Student("小明", 20, 90), new Student("小黑", 19, 60), new Student("小白", 22, 89));
//定义一个Student类的TreeSet,根据Name字段比较去重的比较器
TreeSet<Student> treeSet = new TreeSet<>(Comparator.comparing(Student::getName)); 
//Students实体类对象students添加到TreeSet中去进行比较
treeSet.addAll(students);
//TreeSet再转换成List
List<Student> resList= treeSet.stream().collect(Collectors.toList());
System.out.println(resList);

就着Stream,顺便记录一下排序

java8新特性了解一下

//实体类
public class Student {private String name;private int age;private double score;......       //省略get、set、构造等一系列方法}List<Student> students = Arrays.asList(new Student("小明", 20, 91),new Student("小明", 20, 90), new Student("小黑", 19, 60), new Student("小白", 22, 89));//students对象转流后进行sorted排序,根据Age字段排序,limit取前两条。
Stream<Student> sortedStream = students.stream().sorted((item2, item1) -> item1.getAge() > item2.getAge()).limit(2);
List<Student> newList= sortedStream.collect(Collectors.toList());

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902041.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

部署mall项目遇到的问题和解决方案

部署mall项目爬坑日记 原作者项目 环境:ubuntu20 docker容器相关的坑 发现容器打印的日志和当前时间有出入,相差了8小时,后面得知容器和宿主机的时区不同导致 !> 解决办法有如下几种:1.在刚开始创建容器的时候,docker run后面加上-v /etc/localtime:/etc/localtime:ro2…

高并发下如何保证幂等性

好文章怕丢失?码起来! 本文转载自原文 高并发下如何保证接口的幂等性? 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。 不知道你有没有遇到过这些场…

考OCP认证要交哪些费用?

考OCP认证要交哪些费用? 考OCP认证,指的是Oracle数据库管理员中级认证 Oracle Certified Professional,这是Oracle非常有名的一个认证,对于个人帮助巨大。 OCP认证要交不少钱,些费用因考试版本、培训机构和地区差异而有所不同,以下是综合各渠道信息后的费用说明: 1. 考…

JDK 24 发布,新特性解读!

真快啊!Java 24 这两天已经正式发布啦!这是自 Java 21 以来的第三个非长期支持版本,和 Java 22、Java 23一样。 下一个长期支持版是 Java 25,预计今年 9 月份发布。 Java 24 带来的新特性还是蛮多的,一共 24 个。Java 23 和 Java 23 都只有 12 个,Java 24的新特性相当于这…

解锁实时跌倒检测Jetson Nano与定制的YOLOv8

1. 概述 跌倒是一个重大问题,特别是对老年人和有疾病的人来说,因为它们可能导致严重伤害甚至死亡。坠落探测系统旨在迅速识别此类事件,确保及时提供援助并减少造成严重后果的风险。随着人工智能和机器学习的进步,跌倒检测变得更加准确和可靠。在我之前的博客中,“开始使用…

请求接口,接口响应中带回cookie,再请求其他接口后,cookie没有自动带入

最近做的项目,登陆时内部的登录,做个跳转,在那边登陆后会回跳到本地页面 本地联调接口,回调地址一直是提示跨域,然后再访问其他的接口提示401,未认证状态 从这个大哥中看到的问题,感谢 http://www.janron.net/details/8-computerLanguage-2326-488首先确定后端的接口resp…

Glyphs制作tff字体子集

官网 https://glyphsapp.com/zh 导出字体的子集 开发过程中整个字体文件太大,需要制作部分字体的子集合。 双击tff文件打开字体文件选择要保留的字符 •进入字体编辑窗口后,你会看到所有字符的网格。 •按住 Cmd 键并点击你想要保留的字符。 例如:大小写字母、数字、特殊符号…

开启MySQL8的密码策略组件validate_password.250320

一、validate_password组件安装配置安装组件INSTALL COMPONENT file://component_validate_password;安装后,密码策略立即生效,但仅影响后续操作(如新建用户或修改密码)。卸载组件UNINSTALL COMPONENT file://component_validate_password;卸载后,密码复杂度策略失效,可设…

茶聚场日事清实战案例:OKR目标管理+流程优化+看板会议系统深度应用

茶聚场通过引入日事清管理系统,有效解决了OKR不透明、跨区域协作低效及供应链管理分散等挑战,实现了目标对齐、流程优化与运营效率提升,支撑其在新茶饮市场的战略扩张。公司介绍 在2016年,一个新的品牌诞生在北京的商业心脏地带——茶聚场。作为茶聚场(北京)餐饮管理有限…

20250320日

01.军工 02.纳指etf 03.煤炭:04.红利etf 05.养殖ETF:06.白酒:

勤策、玄瞳、纷享销客对比,消费品领域CRM厂商怎么选?

近年来,随着消费品行业竞争加剧,CRM(客户关系管理)系统已成为企业提升运营效率、增强客户满意度的关键工具。其中,纷享销客、勤策、玄瞳等作为该领域的佼佼者,各自拥有独特的产品特点和适用企业类型。本文将此前三家主流快消领域CRM厂商进行全面对比,帮您理清各家厂商“…

Deepseek本地部署的webui可视化

1.WebUI可视化插件 —— Page Assist 在chrome应用商店中搜索Page Assist,找到后添加到chrome 浏览器添加完成后类似这样 点击这个扩展插件,即可看到 就可以进行对话聊天了