集合还有这么优雅的运算法?
前言:在初中数学,我们也有集合的概念,非但如此,还有集合中的一些运算,例如交集、并集、差集等,那么我们java中的集合是否有这样的运算呢?今天我们就一起来看看!
01
并集
就是将两个集合合起来,元素都放在一起,这个比较简单,我们只需要使用集合的addAll方法就可以,代码如下:
public static void main(String[] args) {//第一个集合List<String> list1 = new ArrayList<String>();list1.add("一");list1.add("二");list1.add("三");System.out.println("第一个集合中的元素:");for (String str : list1) {System.out.print(str + " ");}//第二个集合List<String> list2 = new ArrayList<String>();list2.add("二");list2.add("三");list2.add("四");System.out.println("\n第二个集合中的元素:");for (String str : list2) {System.out.print(str + " ");}//集合之间的交集运算list1.addAll(list2);System.out.println("\n最后集合中的元素:");for (String str : list1) {System.out.print(str + " ");}}
运行结果:
此时的list1集合里面不光有原来的元素,还有list2的元素。
02
交集
即两个集合中都有的元素,一个有另一个也有的,代码如下:(省略声明和初始化集合的代码,和第一个示例一样)
list1.retainAll(list2);
运行结果如下:
很显然,共同存在的只有“二三”,大家想想,list1中的“一”还在吗?
03
差集
即在list1中存在的,但是list2中没有的元素,代码如下:(省略声明和初始化集合的代码,和第一个示例一样)
list1.removeAll(list2);
运行结果:
显然:“一”在list2中是不存在的。原理就是删除list1中出现在list2中的元素。
04
无重复的并集
我们都知道,并集是list1+list2的所有,那如果list1里面有的,list2里面也有,你这一并集,最后的list1集合肯定会有重复的元素,那如何实现不重复的并集呢?代码如下:
public static void main(String[] args) {//第一个集合List<String> list1 = new ArrayList<String>();list1.add("一");list1.add("二");list1.add("三");System.out.println("第一个集合中的元素:");for (String str : list1) {System.out.print(str + " ");}//第二个集合List<String> list2 = new ArrayList<String>();list2.add("二");list2.add("三");list2.add("四");System.out.println("\n第二个集合中的元素:");for (String str : list2) {System.out.print(str + " ");}//集合之间的交集运算list1.removeAll(list2);list1.addAll(list2);System.out.println("\n最后集合中的元素:");for (String str : list1) {System.out.print(str + " ");}}
运行结果:
代码分析,我们先使用差集,过滤一下list1中所有在list2中出现的元素,出现了就删除,也就是remoAll方法调用完之后,list1中还剩“一”,然后list2中还有“二、三、四”,两个一并集,自然结果就是“一、二、三、四”。
你看看这样处理集合优雅不优雅?其实通常我们遇到类似的需求时,一般都会拿起来for循环就遍历,操作,这种方法想都不会想到。
往期精彩
自从有了这款辣椒酱,拌饭再也不用老干妈
2020-10-30
使用相对长度单位rem布局网页内容
2020-11-03
使用相对长度单位em布局网页内容
2020-11-02
binarySearch与IndexOf的那些事儿~
2020-11-01
新机必装!那些你不知道的实用技软件在这里!文末免费获取
2020-10-31
如何使用bootstrap实现轮播图?
2020-10-29
班级日常分享:一天一瞬间!
2020-10-29
点分享
点点赞
点在看
集合还有这么优雅的运算法?相关推荐
- 计算机科学中的递归算法是把问题,递归运算法
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 递归运算法,做为一种算法在程序设计语言中广泛应用,指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象. 中文名 ...
- Dataset:数据集集合(综合性)——机器学习、深度学习算法中常用数据集大集合(建议收藏,持续更新)
Dataset:数据集集合(综合性)--机器学习.深度学习算法中常用数据集大集合(建议收藏,持续更新) 目录 常规数据集 各大方向分类数据集汇总 具体数据集分类 相关文章 DL:关于深度学习常用数据集 ...
- java集合——集合与数组间的转换+算法
[0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合--集合与数组间的转换+算法 的相关知识: 0.2) for full sour ...
- LeCun称梯度下降是最优雅的 ML 算法,Marcus:我不同意
作者|李梅 编辑|陈彩娴 来源|AI科技评论 前几天刚跟马斯克吵完架的Gary Marcus,又双叒叕跟人吵起来了,这次的吵架对象是Yann LeCun. 一向喜欢给深度学习泼冷水的Marcus,在今 ...
- LeCun称梯度下降是最优雅的 ML 算法,Marcus:我不同意!
点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CVer 微信技术交流群 转载自:AI科技评论 作者|李梅 编辑|陈彩娴 前几天刚跟 ...
- 【交换变量】三种交换变量的方式:中间变量法,加减法,异或运算法
这篇文章记录一下,交换变量的三种常见方式,分别是:中间变量法,加减法,异或运算法. 目录 (1)中间变量法 (2)加减法 (3)异或运算法 (1)中间变量法 算法思想: 声明一个额外的临时变量. 临时 ...
- 各种边缘检测算法效果对比-差分运算法、Sobel、Scharr、Laplace(拉普拉斯)、Roberts、Canny
2016-7-14日新增形态学边缘检测法,实际上形态学也是基于窗(卷积核)来实现的,因为你腐蚀和膨胀是基于窗的操作嘛,详情见图像形态学概要-腐蚀.膨胀.开运算.闭运算.形态学梯度(形态学边缘提取).顶 ...
- c语言数值运算法和非数值运算法,数据结构(c语言)1.数据结构是一门研究非数值计算的程序设计问题中计算机的 以及它们之间的 _ 和运算等的学科。① A....
共回答了16个问题采纳率:68.8% 1.数据结构是一门研究非数值计算的程序设计问题中计算机的 A 以及它们之间的 _ B 和运算等的学科. ① A. 数据元素 B. 计算方法 C. 逻辑存储 D. ...
- jsonobject转list集合_怎样优雅的操作集合,CollectionUtils工具类正确使用姿势
点击上方"码之初"关注,···选择"设为星标" 与精品技术文章不期而遇 来源:cnblogs.com/qdhxhz/p/10787130.html 这篇讲的Co ...
最新文章
- Java项目:控制台商城系统(java+打印控制台)
- Ant Design 入门-参照官方文档使用组件
- java 分布式服务器通信,Pigeon是大众点评的一个分布式服务通信框架RPC
- 超详细!各种内部排序算法的比较
- 手撕 MySQL 事务,发生了什么?
- 【转载】分布式系统的理解
- python : 将txt文件中的数据读为numpy数组或列表
- jdk8默认垃圾回收器_JVM系列之经典垃圾回收器(上篇)
- NYOJ 819奶牛 水
- dump文件_centos7 磁盘与文件系统管理
- 边界路由linux,路由表构成简介(Destination/Gateway/Genmask/Iface)
- 青云QingCloud:重剑无锋 大巧不工
- 2143.replace.favo.xrcch.com Dns劫持解决方案
- 四川理工计算机专业好不好,急!!!!四川理工 、 宜宾学院 、 内江师范学院 哪个学校计算机专业好点?...
- java cancel_Future.cancel()疑难杂症
- java中接口可以继承接口吗?
- 计算机语言对传统文化的影响,网络文化对传统文化的冲击
- mac 备份android 手机,Mac怎么备份_Windows怎么备份_iOS怎么备份_安卓怎么备份-太平洋IT百科手机版...
- JS - 日期 - 使用setDate(0)获取上个月的最大一天
- react里面 内联css样式怎么样_React.js内联样式最佳做法
热门文章
- strcmp()字符串比较函数
- 团体程序设计天梯赛-练习集L1-025 正整数A+B (15分)(getline输入)
- word List 46
- 大学生开题报告php,php毕业设计开题报告
- 蓝桥杯 数字三角形 贪心+动态规划
- AT2645 [ARC076D] Exhausted?(Hall定理推论/线段树+扫描线)
- Codeforces Round #627 (Div. 3) E. Sleeping Schedule dp
- YBTOJ:伞兵空降(二分图匹配)
- P3586-[POI2015]LOG【线段树】
- jzoj1282-资源勘探【统计】