找出两个List集合重复的元素
前几天,有个同事问我说怎么找出两个List集合中重复的元素,我当时就说一个集合在外面循环,一个集合在内循环,如果两个元素相等了,就找出来了,我回来一想还是不对,要是数据非常多,这样循环下去,服务器会卡死的,最后我想了想,用以下两种方法:
List<String> list1 = new ArrayList<>();List<String> list2 = new ArrayList<>();list1.add("a");list1.add("b");list1.add("c");list1.add("d");list2.add("d");list2.add("f");list2.add("g");list2.add("h");list2.add("k");
第一种方法:这是把list1集合放到list2中
list2.addAll(list1);HashMap<String,Integer> mapList=new HashMap<>();for(String str:list2){int count=0;if(mapList.get(str)!=null){count=mapList.get(str)+1;}mapList.put(str,count);}System.out.println("重复的元素是:");for(String key:mapList.keySet()){if(mapList.get(key)!=null && mapList.get(key)>0){System.out.println(key);}}
第二种方法:
Map<String,String> map=new HashMap<>();String str=null;String stp=null;String psp=null;for(int i=0;i<list1.size();i++){str=list1.get(i);map.put(str,str);}for(String spt:map.keySet()){System.out.println("key:"+spt+"-----------value:"+map.get(spt));}System.out.println("==========="+map.entrySet());for(int i=0;i<list2.size();i++){stp=list2.get(i);if(stp.equals(map.get(str))){System.out.println("重复的元素:"+stp);}}
以上就是我用的两种方法,由于是个菜鸟,所以大神们有更好的方法望指点,在下感激不尽!
补充:
下面是java8新特性去list集合重复的方法,非常简单,比前的方法简单多了,
首先是将两个集合合并在一起,然后就是下面的方法:(list2是合并以后的集合,spa是去重复的新集合)
List<String> spa = list2.stream().distinct().collect(Collectors.toList());
这种方法最简单,代码少,清晰明了!!!!
补充:
java8的方法中可以找出相同的元素 代码如下:
public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("a");list.add("b");System.out.println(getDuplicateElements(list.stream()));}public static <T> List<T> getDuplicateElements(Stream<T> stream) {return stream.collect(Collectors.groupingBy(p -> p,Collectors.counting())).entrySet().stream() // Set<Entry>转换为Stream<Entry>.filter(entry -> entry.getValue() > 1) // 过滤出元素出现次数大于 1 的 entry.map(entry -> entry.getKey()) // 获得 entry 的键(重复元素)对应的 Stream.collect(Collectors.toList()); // 转化为 List}
执行结果如下:
[a, b]
由于在方法中使用了泛型,所以可以接收任意类型的流,注意在如果是对象,别忘了重写其 hashCode() 和 equals() 方法。
找出两个List集合重复的元素相关推荐
- 高效的找出两个List中的不同元素
转自同名博文,未知真正出处,望作者见谅 如题:有List<String> list1和List<String> list2,两个集合各有上万个元素,怎样取出两个集合中不同的元素 ...
- 汇编语言(十五)之找出两个数组中的相同元素
找出两个数组中的相同元素,并且输出 程序运行: 代码: datas segmentA dw -1,-2, 3, 4, 5, 6, 7, 8, 9, 10,-11, 12, 13, 14, 15ACou ...
- js 快速找出两个数组中的不同元素或对象
js 快速找出两个数组中的不同元素 var arr1 = [0,1,2,3,4,5]; var arr2 = [0,4,6,1,3,9]; function getArrDifference(arr1 ...
- JS案例——找出两个数组中的不同元素或对象、数组去重
一.找出两个数组中的不同元素或对象 1. 数据 var arr1 = ["张瑞淑", "徐海涛", "谢岗岗", "薛鹏" ...
- 找出两列表的共有元素python_python 找出两个dataframe中不同的元素
pandas从Excel中读取数据,数据格式为dataframe格式 用for循环对进行两个列的数据比较想找出不同的元素时,发现数据是一样的,但是比较结果却是相同和不同的都存在(总之就是不是我以为的效 ...
- python 找出两个dataframe中不同的元素
pandas从Excel中读取数据,数据格式为dataframe格式 用for循环对进行两个列的数据比较想找出不同的元素时,发现数据是一样的,但是比较结果却是相同和不同的都存在(总之就是不是我以为的效 ...
- java找出两个List集合的重复项
文章目录 1. 使用 LinkedHashSet 2. java8语法 1. 使用 LinkedHashSet public static void main(String[] args){List& ...
- Algs4-1.4.12找出两个有序数组的公共元素-方法1
1.4.12编写一个程序,有序打印给定的两个有序数组(含有N个int值)中的所有公共元素,程序在最坏情况下所需的运行时间应该和N成比. 答: import java.util.Arrays; publ ...
- js找出两个数组中不同的元素
function getNewArr(a,b){const arr = [...a,...b];const newArr = arr.filter(item => {return !(a.inc ...
最新文章
- Python-CSS整理
- 40.QT-QPropertyAnimationdong和QParallelAnimationGroup动画实现
- [AHOI2009]飞行棋 BZOJ1800
- CentOS中通过NAT连接网络
- linux mount挂载大小,Linux中mount挂载问题小结
- [GXOI/GZOI2019]宝牌一大堆(dp)
- java8 stream流操作的flatMap(流的扁平化)
- 后台管理系统--毕业设计02
- 《计算机操作系统》(第四版)知识点总结
- 微信小程序弹框(组件)
- Vbs脚本编程简明教程之十五
- VSCode如何返回上一步
- 手写的计算机论文范文,手写2000论文格式模板_科技论文手写格式模板
- jQuery下载和使用
- 整合ssh时 犯的愚蠢问题
- python小玩意——打开摄像头并截图
- Linux系统架构概述
- sm-crypto配合hutool加解密报pad block corrupted错误
- 微信小程序详细图文教程-10分钟完成微信小程序开发部署发布
- 第13周项目4 立体类族公有的抽象类