当前位置: 首页 > 后端技术 > Java

面试官:如何去除List中的重复元素?一行代码就搞定了,赶快用起来吧!

时间:2023-04-01 21:00:06 Java

上次stackmanager给大家分享了《带了一个 3 年的开发,不会循环删除 List 中的元素,我简直崩溃!!》,上次也给大家留了一个小话题:List\中如何去除重复元素?虽然这两个主题相似,但实现方式却大不相同。废话不多说,一起来看看实现方法吧。这只是我个人的实施方案。它可能不完整或最佳。欢迎拍砖。List去重方案假设数据如下:/***3ZhangSan,2LiQiang*/publicListinitList=Arrays.asList("ZhangSan","LiSi","ZhangSan","Monday","刘四","李墙","李白","张三","李墙","王舞");本文所有源码已上传:https://github.com/javastacks。..欢迎向Star学习,这??里将提供以下Java实例!1.for循环加去重/***for循环加去重*@author:栈长*@from:公众号Java技术栈*/@Testpublicvoidremove1(){Listlist=newArrayList(初始化列表);列表list2=newArrayList<>();for(Stringelement:list){if(!list2.contains(element)){list2.add(element);}}System.out.println(list2);}这是最基本的实现。创建一个空List,添加前检查是否存在,不存在则添加,保证元素不重复。输出结果:[张三、李四、周一、刘四、李强、李白、王五]2.fordoubleloopdeduplication/***fordoubleloopdeduplication*@author:stacklength*@from:公众号Java技术栈*/@Testpublicvoidremove2(){Listlist=newArrayList(initList);for(inti=0;ii;j--){if(list.get(j).equals(list.get(i))){list.remove(j);}}}System.out.println(list);}使用双循环判断是否有equals,然后去掉。输出结果:[张三、李四、周一、刘四、李强、李白、王五]3.for循环重复坐标去重/***for循环重复坐标去重*@author:stacklength*@from:公众号Java技术栈*/@Testpublicvoidremove3(){Listlist=newArrayList(initList);列表<字符串>list2=newArrayList(initList);for(Stringelement:list2){if(list.indexOf(element)!=list.lastIndexOf(element)){list.remove(list.lastIndexOf(element));}}}System.out.println(list);}这是新的吗?复制一个list2,回收List2,判断list中第一个元素和最后一个元素的坐标位置是否相同。如果一致,则说明没有重复,否则,删除重复位置的元素。输出结果:[张三、李四、周一、刘四、李强、李白、王五]4.设置去重/***设置去重*@author:stacklength*@from:公众号Java技术栈*/@Testpublicvoidremove4(){Listlist=newArrayList(initList);Listlist2=newArrayList(newHashSet(list));System.out.println(list2);}这一招也太简单了吧,一行代码而已!我们知道Set中不包含重复的元素,所以我们先将List放入HashSet中,然后再加载回来,这样可以保证元素不重复。输出结果:[李强、李四、张三、周一、李白、王五、刘四]虽然结果是正确的,但是元素的顺序和原来的List不一致。如果要保证顺序,可以将HashSet换成LinkedHashSet:/***设置去重*@author:stacklength*@from:公众号Java技术栈*/@Testpublicvoidremove4(){Listlist=newArrayList(初始化列表);Listlist2=newArrayList(newLinkedHashSet(list));System.out.println(list2);}输出结果:[张三、李四、周一、刘四、李强、李白、王五]顺序对了,LinkedHashSet可以保证元素顺序!5.流式去重/***流式去重*@author:stacklength*@from:公众号Java技术栈*/@Testpublicvoidremove5(){Listlist=newArrayList(initList);list=list.stream().distinct().collect(Collectors.toList());System.out.println(list);}使用Stream的distinct方法去重,这个方法也很简单,一行代码搞定!我不会介绍Stream的基础知识。我之前在Stream系列中写过一个主题。不懂的可以关注公众号Java技术栈,然后在公众号Java教程菜单中阅读。输出结果:【张三、李四、周易、刘四、李强、李白、王五】总结本文总结了List中去除重复元素的5种方法:for循环添加重复元素for双循环去重forlooptoduplicatecoordinatesRe-Set,de-duplication,Streamde-duplication,后两种方案最简单,一行代码搞定,推荐!那么,你身边有不会删除List中元素的吗?还有谁不知道如何对List进行去重?把这篇文章发给他,让大家少走弯路,少写垃圾代码,共同进步。本文所有完整示例源码均已上传:https://github.com/javastacks...欢迎Star学习,这??里将提供以下Java示例!你知道任何重复数据删除技术吗?欢迎留言分享~好了,今天的分享就到这里了,稍后栈长会分享更多有趣的Java技术和最新的技术资料,关注公众号Java技术栈第一时间推送,我也会面试主流Java的问题和参考答案都整理出来了。在公众号后台回复关键字“面试”刷题。版权声明:本文为公众号《Java技术栈》原创。转载、引用本文内容请注明出处。抄袭、洗稿均为侵权投诉,后果自负,并保留追究法律责任的权利。近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!