最新要闻
- 热文:OPPO打造!唯一配备潜望长焦的天玑旗舰来了
- 天天短讯!死磕RTX 40!AMD RX 7600/7700/7800齐曝光:据说苏妈定价有诚意
- 重现《放羊的星星》!林志颖特斯拉车祸后复出晒照 事故原因成谜 是踩错刹车?
- 天天百事通!今日成都到康定怎么坐车_成都到康定
- 亮机卡也有春天 锐龙7000核显超频到3.1GHz 游戏性能猛增40%
- 当前要闻:困扰十几亿人!脚趾甲咋会向肉里长?
- 世界焦点!TCL发布超薄四开门冰箱T9:0cm无缝式嵌入 456L仅3399元
- 增程、换电、800V高压快充 谁才是未来新能源车最佳补能方式?
- 环球新动态:发3000元却收回2800元!“慈善主播”被行拘 账号被封
- 【焦点热闻】秘而不宣的读法
- 世界热门:RTX 4070 Laptop逆天能效比!七彩虹将星X15 AT 2023游戏本首发评测
- 全球快看:1月豪华车销量榜:蔚来碾压全系合资二线豪华品牌
- 被网友玩坏?微软Bing的ChatGPT被证实变愚蠢了
- 每日消息!“张伟”骗取数位宝马车主百万购车款 4S店疯狂推卸责任?
- AMD锐龙7 7735HS迷你机也有“青春版”:只变了两个USB接口
- 环球今头条!攒台白色的MATX主机,在B760主板上也能玩好内存超频
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
今日聚焦!面试官:怎么去除 List 中的重复元素?我一行代码搞定,赶紧拿去用!
问题
上次栈长给大家分享了《带了一个 3 年的开发,不会循环删除 List 中的元素,我简直崩溃!!》,上次也给大家留了个小话题:
(资料图)
怎么去除 List
中的重复元素呢?
虽然两个话题差不多,但实现起来就大相径庭了,废话少说,来看看都有哪些实现方式,这仅是我个人的实现方案,不一定全,也不一定是最优的,欢迎大家拍砖。
List 去重方案
假设有以下数据:
/** * 3 个张三,2 个李强 */public List initList = Arrays.asList( "张三", "李四", "张三", "周一", "刘四", "李强", "李白", "张三", "李强", "王五");
本文所有完整示例源代码已经上传:
https://github.com/javastacks/javastack
欢迎 Star 学习,后面 Java 示例都会在这上面提供!
1、for 循环添加去重
/** * for 循环添加去重 * @author: 栈长 * @from: 公众号Java技术栈 */@Testpublic void remove1() { List list = new ArrayList(initList); List list2 = new ArrayList<>(); for (String element : list) { if (!list2.contains(element)) { list2.add(element); } } System.out.println(list2);}
这个是最基本的实现了,创建一个空的 List,添加前判断一下存在不存在,不存在才添加,这样就保证了元素不重复。
输出结果:
[张三, 李四, 周一, 刘四, 李强, 李白, 王五]
2、for 双循环去重
/** * for 双循环去重 * @author: 栈长 * @from: 公众号Java技术栈 */@Testpublic void remove2() { List list = new ArrayList(initList); for (int i = 0; i < list.size() - 1; i++) { for (int j = list.size() - 1; j > i; j--) { if (list.get(j).equals(list.get(i))) { list.remove(j); } } } System.out.println(list);}
利用双循环,判断是否有相等的,再进行移除。
输出结果:
[张三, 李四, 周一, 刘四, 李强, 李白, 王五]
3、for 循环重复坐标去重
/** * for 循环重复坐标去重 * @author: 栈长 * @from: 公众号Java技术栈 */@Testpublic void remove3() { List list = new ArrayList(initList); List list2 = new ArrayList(initList); for (String element : list2) { if (list.indexOf(element) != list.lastIndexOf(element)) { list.remove(list.lastIndexOf(element)); } } System.out.println(list);}
这种方式很新颖吧?
复制一个 list2,再循环 List2,判断 list 中的元素的首尾出现的坐标位置是否一致,如果一致,则说明没有重复的,否则重复,再删除重复的位置的元素。
输出结果:
[张三, 李四, 周一, 刘四, 李强, 李白, 王五]
4、Set 去重
/** * Set 去重 * @author: 栈长 * @from: 公众号Java技术栈 */@Testpublic void remove4() { List list = new ArrayList(initList); List list2 = new ArrayList(new HashSet(list)); System.out.println(list2);}
这招也太简单了吧,一行代码搞定!
我们知道 Set 是不包含重复元素的,把 List 先装进 HashSet,然后再装回来,这样就保证了元素的不重复。
输出结果:
[李强, 李四, 张三, 周一, 李白, 王五, 刘四]
结果虽然正确,但元素顺序和原始 List 不一致,如果要保证顺序性,可以把 HashSet 换成 LinkedHashSet:
/** * Set 去重 * @author: 栈长 * @from: 公众号Java技术栈 */@Testpublic void remove4() { List list = new ArrayList(initList); List list2 = new ArrayList(new LinkedHashSet(list)); System.out.println(list2);}
输出结果:
[张三, 李四, 周一, 刘四, 李强, 李白, 王五]
这下顺序对了吧,LinkedHashSet 可以保证元素的顺序性!
5、Stream 去重
/** * Stream 去重 * @author: 栈长 * @from: 公众号Java技术栈 */@Testpublic void remove5() { List list = new ArrayList(initList); list = list.stream().distinct().collect(Collectors.toList()); System.out.println(list);}
利用 Stream 的 distinct 方法去重,这个方法也十分简单,一行代码搞定!Stream 基础就不介绍了,Stream 系列我之前写过一个专题了,不懂的关注公众号Java技术栈,然后在公众号 Java 教程菜单中阅读。
输出结果:
[张三, 李四, 周一, 刘四, 李强, 李白, 王五]
总结
本文总结了 5 种去除 List 重复元素的方法:
- for 循环添加去重
- for 双循环去重
- for 循环重复坐标去重
- Set 去重
- Stream 去重
最后两种方案最简单,都是一行代码就能搞定的,推荐使用!
所以说,你身边还有谁不会删除 List 中的元素?还有谁不会 List 去重的?把这篇文章发给他吧,让大家少走弯路,少写垃圾代码,共同进步。
本文所有完整示例源代码已经上传:
https://github.com/javastacks/javastack
欢迎 Star 学习,后面 Java 示例都会在这上面提供!
你还知道哪些去重技巧?欢迎留言分享~
好了,今天的分享就到这里了,后面栈长会分享更多好玩的 Java 技术和最新的技术资讯,关注公众号Java技术栈第一时间推送,我也将主流 Java 面试题和参考答案都整理好了,在公众号后台回复关键字 "面试" 进行刷题。
版权声明:本文系公众号 "Java技术栈" 原创,转载、引用本文内容请注明出处,抄袭、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权利。
近期热文推荐:
1.1,000+ 道 Java面试题及答案整理(2022最新版)
2.劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!
5.《Java开发手册(嵩山版)》最新发布,速速下载!
觉得不错,别忘了随手点赞+转发哦!
今日聚焦!面试官:怎么去除 List 中的重复元素?我一行代码搞定,赶紧拿去用!
热文:OPPO打造!唯一配备潜望长焦的天玑旗舰来了
天天短讯!死磕RTX 40!AMD RX 7600/7700/7800齐曝光:据说苏妈定价有诚意
重现《放羊的星星》!林志颖特斯拉车祸后复出晒照 事故原因成谜 是踩错刹车?
Map数据结构详解
环球视讯!在PHP和JavaScript中设置Cookie、会话存储(SessionStorage)和本地存储(LocalStorage)
天天百事通!今日成都到康定怎么坐车_成都到康定
亮机卡也有春天 锐龙7000核显超频到3.1GHz 游戏性能猛增40%
当前要闻:困扰十几亿人!脚趾甲咋会向肉里长?
世界焦点!TCL发布超薄四开门冰箱T9:0cm无缝式嵌入 456L仅3399元
增程、换电、800V高压快充 谁才是未来新能源车最佳补能方式?
环球新动态:发3000元却收回2800元!“慈善主播”被行拘 账号被封
【焦点热闻】秘而不宣的读法
C#的string是一种糟糕的设计吗?
当前视讯!队列——queue的用法(及洛谷B3616)
vue-cli安装依赖 props属性三种方式 混入迷信 插件 elementUI vuex vue Routerd localStorage系列
openfoam文件读取
fusion app自定义事件源码介绍(上)
世界热门:RTX 4070 Laptop逆天能效比!七彩虹将星X15 AT 2023游戏本首发评测
全球快看:1月豪华车销量榜:蔚来碾压全系合资二线豪华品牌
被网友玩坏?微软Bing的ChatGPT被证实变愚蠢了
每日消息!“张伟”骗取数位宝马车主百万购车款 4S店疯狂推卸责任?
AMD锐龙7 7735HS迷你机也有“青春版”:只变了两个USB接口
环球今头条!攒台白色的MATX主机,在B760主板上也能玩好内存超频
全球焦点!RS485 MODBUS转PROFINET网关案例 | 超声波明渠流量计接入到PLC1200 PROFINE
焦点热门:前后端分离项目解决跨域的终极方法
环球今热点:[Java基础]自动装箱与自动拆箱--为什么整型比较必须用equals?
【天天新要闻】Detecting glass in Simulataneous Localisation and Mapping
天天热文:贝叶斯与卡尔曼滤波(2)--连续随机变量的贝叶斯公式
当前热门:用送的那块布擦镜片:小心眼镜被废!
观热点:60岁快递员意外猝死 快递公司回应:深感痛心 善后已达成一致
女子连刷10个差评商家找上门:不好吃你天天来干嘛 谁生活容易啊
【世界报资讯】果粉入手一加Ace 2:开20个应用不杀后台 苹果开3个应用就不行了
80后回忆的“均瑶牛奶”公司进军新能源车:首款纯电SUV云兔来了 莆田生产
信息:Qt调用摄像头一,基础版
k8s多节点二进制部署以及Dashboard UI
记住这12个要点,你也能打造出让HR和技术主管前一亮的前端简历
《原子之心》冰箱诺拉全九国语言配音:怎么没日语?
粉丝发现周深自用手机是iQOO 11 Pro传奇版:5米开外就能看到
电动两轮车总是骑半路就没电?这5种错误充电习惯赶快纠正
世界今头条!男子酷爱嚼槟榔:最终确诊舌癌
【报资讯】免费的ChatGPT意外断网 国内伪装自主的AI露馅了
守护安全|AIRIOT城市天然气综合管理解决方案
0x03_My-OS在实体机上面运行
每日播报!【算法训练营day53】LeetCode1143. 最长公共子序列 LeetCode1035. 不相交的线 LeetCode53. 最大子序和
快讯:两数之和、三数之和、四数之和(双指针)
世界焦点!今日山水一程三生有幸是形容爱情的吗_山水一程三生有幸
环球最资讯丨俞敏洪说想给董宇辉在北京买套房子 这话我听着耳熟
消息!魅族20未发先火!1元超前预订7小时订单破10万
世界热讯:研究称果糖或能导致老年痴呆:专家建议少食用
全球热议:旅日大熊猫香香坐顺丰飞机到家!1个月后与公众见面
环球视讯!成都一公司面试需填芝麻信用分 网友热议
每日信息:100亿级订单怎么调度,来一个大厂的极品方案
[学习笔记]Rocket.Chat业务数据备份
记录--uni-app实现京东canvas拍照识图功能
世界快资讯:Java+Jquer实现趋势图
全球最新:温州特斯拉事故20年驾龄司机仍昏迷:特斯拉回应称难过 重申全力配合调查
环球今热点:Xbox游戏将登陆任天堂主机 网友质疑:NS能带动吗?
世界微资讯!场面爆笑!外国人为开比亚迪开始学中文:难为“小迪”了
即时看!音悦台将回归登热搜!主体公司已成老赖:累计被执行1376万
世界视讯!什么是经营贷什么是消费贷?浅谈二者区别
puppet安装使用踩坑笔记
箭头函数详解
TypeScript 入门自学笔记 — 接口的使用(六)
快资讯丨Python关于异常处理的教程
天天观察:scrollView 嵌套 recyclerview 时 BaseQuickAdapter 九宫格图片拖拽到底部删除
14年老牌网站 音悦台要回归了!官方称很快就要内测
每日快看:杭州发现鱼类新物种苕溪鱲:通体散发宝蓝色金属光泽
当前播报:爱奇艺认错 恢复会员投屏!上海消保委:愿意为消费者叫板
是懂玩家的!《原子之心》为机器人姐妹花开通ins账号
焦点观察:张小泉公开一防菜刀断裂专利 这次拍蒜不断了?
当前最新:中小企业如何有效应对计算资源的弹性变化需求?
热消息:来一波骚操作,Java内存模型
全球新消息丨Windows家庭版安装本地组策略编辑器【gpedit.msc】
Redis详解
当前焦点!@ResponseBody注解的作用
万马股份(002276.SZ):万马新能源充电桩的枪线已经自产 由万马专缆生产
精选!售10-20万元 蔚来整合猎豹工厂:新品牌“萤火虫”落户安徽
今日最新!冲刺IPO!一年狂赚7亿美元 中国跨境电商神话靠啥吸粉?
乐视被强制执行100万:没版权擅自转播了优酷综艺
男子网购iPhone 14开箱发现是iQOO 商家赔50元优惠券被拒
当前动态:曾致135人死亡 印度断桥事故调查报告出炉:钢索严重腐蚀
0x02_My-OS操作系统里的helloworld
天天新资讯:iptables防火墙
世界热议:万物皆可集成资源包!低代码集成系列一网打尽
天天快播:通过例子学习粒子群优化算法
全球速讯:暂时性死区以及函数作用域
全球观察:祸不单行!美国俄亥俄州又现爆炸:30公里外都见到蘑菇云
天天新消息丨2.8K OLED屏+10核CPU 小米首款翻转本降价1000元起
售价高达4199元!森海塞尔HD 660S2开放式动圈耳机正式开售
【世界独家】【算法训练营day52】LeetCode300. 最长递增子序列 LeetCode674. 最长连续递增子序列 LeetCode718. 最长重复子
开心档之Bootstrap4 自定义表单
速读:标准语言的重要性_语言的重要性
环球热讯:《蚁人3》等漫威大片中国吃瘪!国人为国产电影买单 《流浪地球2》等降维打击
世界微速讯:直播预告 | 嵌入式BI如何将数据分析真正融入业务流程
当前快报:(数据库系统概论|王珊)第六章关系数据理论-第一节:为什么要研究关系数据理论
世界播报:C# 利用FluentFTP实现FTP上传下载功能
天天通讯!NBA中国与蚂蚁集团开启全面战略合作:支付宝能看球了!
比亚迪百万级超跑 仰望U9路试谍照首次曝光:变好看了
环球播报:特斯拉中国工厂提速:2023新款Model 3来了 内饰大升级