关于List集合的去重与List集合的并/交/差集
List集合的去重
List集合的去重:转为Set集合进行去重:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public void test2() { // 准备数据 Integer[] arr = {42, 14, 28, 34, 56, 2, 14}; List list = new ArrayList(Arrays.asList(arr)); // 准备set集合 Set set = new HashSet(); set .addAll(list); // 清空list原数据,并将新的去重后的数据进行一个添加 list.clear(); // 将指定集合中的所有元素追加到此列表的末尾 list.addAll( set ); System. out .println( "List=>" + list); System. out .println( "Set=>" + set ); } |
注意:如果List集合中存放的是对象的话,通过Set集合去重需要需要注意,需要在对象中重写HashCode跟equals方法。
List集合的去重:通过List的contains
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public void test2() { // 准备数据 Integer[] arr = {42, 14, 28, 34, 56, 2, 14}; List<Integer> list = new ArrayList<>(Arrays.asList(arr)); // 创建一个新的List集合,用于保存去重重复数据的集合 List<Integer> newList = new ArrayList<>(); for ( int i = 0; i < list.size(); i++) { // 判断newList集合中是否包含元素信息 if (!newList.contains(list. get (i))) { newList.add(list. get (i)); } } System. out .println( "List=>" + newList); } |
List集合的去重:通过Stream流
1 2 3 4 5 6 7 8 | public void test2() { // 准备数据 Integer[] arr = {42, 14, 28, 34, 56, 2, 14}; List list = new ArrayList(Arrays.asList(arr)); // 使用JDK8的Stream流进行去重 List newList = (List) list.stream().distinct().collect(Collectors.toList()); System. out .println( "List=>" + newList); } |
List集合获取数据的并交差集:
转载链接:https://www.cnblogs.com/zhaobinrui/p/14628618.html
Java8之前:
并集
并集 两个集合中去掉重复的数据就是并集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @Test public void testSet2(){ Set<String> set1 = new HashSet<>(); Set<String> set2 = new HashSet<>(); set1.add( "a" ); set1.add( "b" ); set1.add( "c" ); set2.add( "c" ); set2.add( "d" ); set2.add( "e" ); // 并集 set1.addAll(set2); System.out.println( "并集是" + set1); // 并集是[a b c d e] } |
交集
交集 两个集合中有相同的元素 抽取出来的数据就是为交集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @Test public void testSet1(){ Set<String> set1 = new HashSet<>(); Set<String> set2 = new HashSet<>(); set1.add( "a" ); set1.add( "b" ); set1.add( "c" ); set2.add( "c" ); set2.add( "d" ); set2.add( "e" ); // 交集 set1.retainAll(set2); System.out.println( "交集是" + set1); // 交集是 c } |
差集
差集 第一个集合中的数据在第二个集合中有重复时,去掉重复数据的第一个集合就是差集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @Test public void testSet3(){ Set<String> set1 = new HashSet<>(); Set<String> set2 = new HashSet<>(); set1.add( "a" ); set1.add( "b" ); set1.add( "c" ); set2.add( "c" ); set2.add( "b" ); set2.add( "e" ); // 差集 set1.removeAll(set2); System.out.println( "差集是" + set1); // 差集是 a b 去掉set1中属于set2的元素 } |
Java8之后:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | @Test public void test1(){ List<Integer> list1 = new ArrayList<>(); list1.add( 1 ); list1.add( 2 ); list1.add( 3 ); List<Integer> list2 = new ArrayList<>(); list2.add( 3 ); list2.add( 4 ); list2.add( 5 ); System.out.println( "==========求交集==========" ); List<Integer> list = list1.stream().filter(t->list2.contains(t)).collect(Collectors.toList()); list.stream().forEach(System.out::println); System.out.println( "==========求差集==========" ); list = list1.stream().filter(t-> !list2.contains(t)).collect(Collectors.toList()); list.stream().forEach(System.out::println); System.out.println( "==========求并集==========" ); list.addAll(list1); list.addAll(list2); list = list.stream().distinct().collect(Collectors.toList()); list.stream().forEach(System.out::println); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话