集合运算时使用更优雅的方式

简介:

在初中代数中,我们经常会求两个集合的并集、交集、差集等,在Java中也存在着此 类运算,那如何实现呢? 一提到此类集合操作,大部分的实现者都会说:对两个集合进行遍历,即可求出结果。是的,遍历可以实现并集、交集、差集等运算,但这不是最优雅的处理方式。下面来看看如何进行更优雅、快速、方便的集合操作。

(1) 并集,(2)交集,(3)差集(补集),(4)无重复并集.

也叫做合集,把两个集合加起来即可,这非常简单,代码如下:

复制代码
 1 import java.util.ArrayList;
 2 import java.util.List;
 3 
 4 public class Client {
 5     public static void main(String[] args) {
 6         List<String> list1 = new ArrayList<String>();
 7         list1.add("A");
 8         list1.add("B");
 9         List<String> list2 = new ArrayList<String>();
10         list2.add("C");
11         list2.add("B");
12         
13         //并集
14         //list1.addAll(list2);//[A, B, C, B]
15 
16         //交集
17         //list1.retainAll(list2);//[B]
18 
19         //补集 list1有,但是list2没有的
20         //list1.removeAll(list2);//[A]
21 
22         /*无重复并集*/
23         //删除在list1中出现的元素
24         list2.removeAll(list1);
25         //把剩余的list2元素加到list1中
26         list1.addAll(list2);
27         System.out.println(list1);    //[A, B, C]
28     }
29 }
复制代码

 为什么介绍并集,交集,差集呢?这是因为如果检查一下嗲吗,就会发现,很少有程序员使用JDK提供的方法来实现这些集合操作.基本上都是采用的标准的嵌套for循环:要并集就是加法,要交集了就使用contains判断是否存在.要差集了就使用!contains(不包含),有时候还要为这类操作提供一个单独的方法,看似很规范,但已经脱离了优雅的味道.

集合的这些操作在持久层中使用得非常频繁,从数据库中取出的就是多个数据集合,之后我们就可以使用集合的各种方法构建我们需要的数据了,需要两个集合的and结果,那是 交集,需要两个集合的or结果,那是并集,需要两个集合的not结果,那是差集。


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5660165.html,如需转载请自行联系原作者

相关文章
|
数据安全/隐私保护
阿里云商标注册流程
很多用户有注册商标的需求,又不知道怎么注册商标。特别是他们想在阿里云注册商标,其实注册商标很简单。商标类型,又分为:文字商标,图形商标,文字图形组合商标。无论你在阿里云是要买域名,买服务器,还是干嘛,首先你都需要注册阿里云账号的。
1908 52
|
SQL 分布式计算 大数据
大数据SQL数据倾斜与数据膨胀的优化与经验总结
目前市面上大数据查询分析引擎层出不穷,但在业务使用过程中,大多含有性能瓶颈的SQL,主要集中在数据倾斜与数据膨胀问题中。本文结合业界对大数据SQL的使用与优化,尝试给出相对系统性的解决方案。
14206 5
|
网络协议 安全 网络安全
揭秘互联网的隐形斗篷:你的DNS数据真的安全吗?
【8月更文挑战第27天】在互联网中,每个网站通过IP地址定位,但记忆这些数字困难且存在安全风险。因此,域名系统(DNS)诞生,实现域名与IP之间的转换。然而,未加密的DNS请求易受中间人攻击,导致隐私泄露或恶意软件植入。为解决此问题,DNS-over-HTTPS(DoH)和DNS-over-TLS(DoT)协议应运而生,它们通过对DNS查询进行加密确保数据传输安全。本文将介绍这两种协议,并通过示例展示如何配置支持DoT的DNS服务器,包括安装dnscrypt-proxy、编辑配置文件及重启服务等步骤。
1072 0
|
运维 安全 物联网
带你读《网络安全等级保护2.0定级测评实施与运维》——1.2 等保 2.0 时代的主要变化
带你读《网络安全等级保护2.0定级测评实施与运维》——1.2 等保 2.0 时代的主要变化
|
Java 机器人 数据安全/隐私保护
蓝桥杯历届真题题目+解析+代码+答案(2013-2020)(JavaA、B、C组)(C++语言)(Python)
蓝桥杯历届真题题目+解析+代码+答案(2013-2020)(JavaA、B、C组)(C++语言)(Python)
816 0
|
机器学习/深度学习 算法 数据挖掘
操作系统调度算法的演进与性能分析
随着计算机科学的发展,操作系统作为硬件与软件之间的桥梁,其调度算法对系统性能有着举足轻重的影响。本文将探讨操作系统中调度算法的演变,从早期的简单调度策略到现代复杂的多级反馈队列和实时调度机制,并结合最新研究和实验数据,深入分析不同调度算法对系统吞吐量、响应时间及资源利用率的影响。通过对调度算法性能的定量评估,本文旨在为系统设计者提供优化决策的理论依据,同时为未来调度算法的研究指明方向。
278 0
|
存储 Java 数据库连接
使用Java开发桌面应用程序
使用Java开发桌面应用程序
642 0
|
存储 SQL 关系型数据库
记一次 ClickHouse 性能测试
本文将对比 MySQL、InfluxDB、ClickHouse 在千万数据量下的写入耗时、聚合查询耗时、磁盘占用等各方面性能指标,并详细记录了测试全过程。
1142 0
记一次 ClickHouse 性能测试
|
SQL JSON NoSQL
6 款超好用的 MongoDB GUI 使用评测
与传统的基于表格和列的数据库不同,非关系型数据库通过嵌套的键值对进行数据操作。所以当用户通过前端解析数据时,非关系型数据库的数据格式就已经满足要求了。要通过命令行对非关系型数据库进行操作并非易事,所以本篇文章中码匠将针对适用于 MongoDB 的 GUI 工具进行介绍,相信总有一款适合您。
1559 0
6 款超好用的 MongoDB GUI 使用评测