java学习笔记-集合运算

笑虾      2022-06-07     366

关键词:

Java 学习笔记 - 集合运算

List.retainAll 交集

// 测试数据
List<Integer> listA = IntStream.rangeClosed(1,6).boxed().collect(Collectors.toList());
List<Integer> listB = IntStream.rangeClosed(4,10).boxed().collect(Collectors.toList());

// listA 交 listB。
boolean b = listA.retainAll(listB);
System.out.println(b); // 当 listA 发生改变返回 true
System.out.println(listA); // [4, 5, 6]

boolean b1 = listA.retainAll(listA);
System.out.println(b1); // 当 listA 没发生该变返回 false
System.out.println(listA); // [4, 5, 6]

CollectionUtils

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>
// 测试数据
List<Integer> listA = IntStream.rangeClosed(1,6).boxed().collect(Collectors.toList());
List<Integer> listB = IntStream.rangeClosed(4,10).boxed().collect(Collectors.toList());

// 交集:保留两个集合中都有的元素
Collection<Integer> intersect1 = CollectionUtils.retainAll(listA, listB);
Collection<Integer> intersect2 = CollectionUtils.retainAll(listA, listB);
System.out.println(intersect1); // [4, 5, 6]
System.out.println(intersect2); // [4, 5, 6]

// 并集:合并两个集合
Collection<Integer> union1 = CollectionUtils.union(listA, listB);
Collection<Integer> union2 = CollectionUtils.union(listB, listA);
System.out.println(union1); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
System.out.println(union2); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

// (交集的)补集
// AB并集 - AB交集
Collection<Integer> disjunction1 = CollectionUtils.disjunction(listA, listB);
Collection<Integer> disjunction2 = CollectionUtils.disjunction(listB, listA);
System.out.println(disjunction1); // [1, 2, 3, 7, 8, 9, 10]
System.out.println(disjunction2); // [1, 2, 3, 7, 8, 9, 10]

//===================================================================
// 差集
// 去掉 A 中,勾结 B 的元素。(对比AB,保留仅在 A 中包含的元素)
Collection<Integer> except1 = CollectionUtils.subtract(listA, listB);
// 去掉 B 中,勾结 A 的元素。(对比AB,保留仅在 B 中包含的元素)
Collection<Integer> except2 = CollectionUtils.subtract(listB, listA);
System.out.println(except1); // [1, 2, 3]
System.out.println(except2); // [7, 8, 9, 10]

Java8 Stream

List<Integer> listA = IntStream.rangeClosed(1, 6).boxed().collect(Collectors.toList());
List<Integer> listB = IntStream.rangeClosed(4, 10).boxed().collect(Collectors.toList());

// 交集
List<Integer> intersection = listA.stream()
        .filter(a -> listB.contains(a))
        .collect(Collectors.toList());
System.out.println(intersection); // [4, 5, 6]

// 并集
List<Integer> union = Stream.concat(listA.stream(), listB.stream()).distinct().collect(Collectors.toList());
System.out.println(union); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

boolean b = listA.addAll(listB);
System.out.println(b); // 如果 listA 有改变 true
List<Integer> collect = listA.stream().distinct().collect(Collectors.toList());
System.out.println(collect); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

//===================================================================
// 差集
// 在 A 中去掉 B 也有的元素
List<Integer> subtraction = listA.stream()
        .filter(a -> !listB.contains(a))
        .collect(Collectors.toList());
System.out.println(subtraction); // [1, 2, 3]

// 在 B 中去掉 A 也有的元素
List<Integer> subtraction2 = listB.stream()
        .filter(a -> !listA.contains(a))
        .collect(Collectors.toList());
System.out.println(subtraction2); // [7, 8, 9, 10]

参考资料

List.retainAll (Java Platform SE 8 )
Apache Commons 集合工具类:commons-collections
java.util.stream.Stream (Java Platform SE 8 )

开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

java集合学习笔记(代码片段)

Java集合学习笔记前言开始学习Java的集合,简要的记录一下学习到的东西,仅供自己查阅和复习方便。学习自廖雪峰的Java教程。集合简介Java标准库自带的java.util包提供了集合类:Collection,它是除Map外所有其他集... 查看详情

java笔记学习

java笔记一、认识java语言1、Java平台-Java语言特性2、DOS命令指示符使用3、Java集成开发环境4、Java程序结构组成-类5、Java程序结构组成-方法6、Java程序结构组成-语句7、Java程序结构组成-注释8、命名规范二、运算符与表达式1、算术... 查看详情

java笔记学习

java笔记一、认识java语言1、Java平台-Java语言特性2、DOS命令指示符使用3、Java集成开发环境4、Java程序结构组成-类5、Java程序结构组成-方法6、Java程序结构组成-语句7、Java程序结构组成-注释8、命名规范二、运算符与表达式1、算术... 查看详情

java集合_学习笔记

一、集合  1、集合类也称容器类,主要负责保存、盛装其他数据。  2、集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组)。  3、Java5后提供一些多线程安全的集合类,放在java.util.concurrrent。(u... 查看详情

java学习笔记(代码片段)

java笔记一、认识java语言1、Java平台-Java语言特性2、DOS命令指示符使用3、Java集成开发环境4、Java程序结构组成-类5、Java程序结构组成-方法6、Java程序结构组成-语句7、Java程序结构组成-注释8、命名规范二、运算符与表达式1、算术... 查看详情

java集合学习笔记

集合容器结构图:java容器类类库的用途是保存对象,分为两个概念,collection和map。collection保存单一的元素,而map保存相关联的键值对。collection    中基本方法:intsize():获取集合的元素个数booleanadd(Ee):向集合中添... 查看详情

java集合学习笔记:hashmap(代码片段)

Java集合学习笔记:HashMapUML简介阅读源码属性字段1.静态属性2.成员属性HashMap结构静态工具方法hash【算法学习】^加>>>减少碰撞comparableClassFor(Objectx)compareComparables(Class<?>kc,Objectk,Objectx)tableSizeFor(intcap)【算法学习】32 查看详情

java集合学习笔记:abstractlist(代码片段)

Java集合学习笔记:AbstractListequals(Objecto)hashCode()indexOf(Objecto)lastIndexOf(Objecto)clear()addAll(intindex,Collection<?extendsE>c)equals(Objecto)ItrListItrSubList参考资料equals(Objecto)实现equa 查看详情

java集合学习笔记:map(代码片段)

Java集合学习笔记:MapUML简介源码阅读嵌套类interfaceEntry<K,V>静态方法comparingByKey()comparingByKey(Comparator<?superK>cmp)comparingByValue()comparingByValue(Comparator<?superV>cmp)比较器InterfaceCo 查看详情

java学习笔记5.1.1集合-集合概念与分类

文章目录零、本讲学习目标一、为何引入集合(一)数组局限性(二)可能的场景(三)解决的方法二、集合的定义(一)集合就是容器(二)集合类演示任务:实现数组降序三、集合的分类(一)单列集合-Collection(二)双列... 查看详情

java集合学习笔记:hashmap(代码片段)

Java集合学习笔记:HashMapUML简介阅读源码属性字段1.静态属性2.成员属性静态内部类classNode<K,V>静态工具方法hash(Objectkey)comparableClassFor(Objectx)compareComparables(Class<?>kc,Objectk,Objectx)tableSizeFor(intcap)构造方法H 查看详情

java学习笔记集合底层原理

本篇博客主要介绍的是底层原理,如果想学习集合的方法可以参考我们之前总结的一篇博客:https://blog.csdn.net/qq_44713772/article/details/117045583一、Collection集合Collection接口是单列集合类的父接口,这种集合可以将数据一... 查看详情

java学习笔记集合转数组---toarray()

1packagep2;23importjava.util.ArrayList;4importjava.util.Arrays;5importjava.util.List;67publicclassToArray{89publicstaticvoidmain(String[]args){1011/*12*集合转数组13*使用的是Collection接口中的toArray方法。14*集合转成数组:可以 查看详情

java集合类学习笔记2

二,具体的集合集合类型描述ArrayList一种可以动态增长和缩减的索引序列LinkedList一种可以在任何位置进行高效地插入和删除操作的有序序列ArrayDeque一种用循环数组实现的双端队列HashSet一种没有重复元素的无序集合TreeSet一种有... 查看详情

java学习笔记四——运算符

算术运算符  加减乘除(+、-、*、/)就不说了。求余运算符%  描述:第一个操作数除以第二个操作数,得到一个整除的结果后剩下的值就是余数  注意:求余预算的结果不一定总是整数,当操作数是浮点数时,结果可能... 查看详情

集合框架学习笔记

集合框架目录概述Collection接口和Iterator接口:Map接口:工具类Collection和Arrays:古老的接口类与接口:一、Java集合类概述:(一)集合的概念javaSE包含了由一组类和接口组成的java集合框架(JavaCollectionFramework,简称JCF),其主要... 查看详情

java集合学习笔记:比较器comparablecomparator(代码片段)

Java集合学习笔记:比较器Comparable、ComparatorComparable隐式比较升序(默认)Comparator显示比较Lambda降序Comparator.reverseOrder降序参考资料Comparable隐式比较packagecom.jerry;importlombok.Data;@DatapublicclassHero 查看详情

java集合学习笔记:比较器comparablecomparator(代码片段)

Java集合学习笔记:比较器Comparable、ComparatorComparable隐式比较升序(默认)Comparator显示比较Lambda降序Comparator.reverseOrder降序参考资料Comparable隐式比较packagecom.jerry;importlombok.Data;@DatapublicclassHero 查看详情