js删除两个集合中共同元素_多个集合中的共同和独特元素

js删除两个集合中共同元素

本周,我们将暂时中断较高级别的问题和技术文章,以解决我们中许多人可能面临的一些代码问题。 没什么花哨的或太辛苦的,但是有一天它可能会节省您15分钟的时间,偶尔回到基础上也很不错。

因此,让我们开始吧。 有时,您会发现需要确定一个集合中的哪些元素存在于另一个集合中,哪些是常见的,和/或哪些不存在于另一个集合中。 阿帕奇百科全书集合在CollectionUtils一些一些实用方法是有用的,尤其是路口 (),但这个帖子去有点超出了到计算集合的集合独特的元素,它总是很高兴坐下来的细节。 我们还将通过支持任意数量的集合(而不是像CollectionUtils那样仅支持两个集合)来使解决方案更加通用。 另外,事实是,并非所有人都选择或能够包含库只是为了获得一些有用的实用程序方法。

当只处理两个集合时,这不是一个难题,但是并不是所有的开发人员都熟悉java.util.Collection定义的所有方法,因此这里是一些示例代码。 他们的关键是一起使用retainAllremoveAll方法来构建三个集合-通用,仅出现在集合A中,仅出现在集合B中。

Set<String> a = new HashSet<String>();
a.add("a");
a.add("a2");
a.add("common");Set<String> b = new HashSet<String>();
b.add("b");
b.add("b2");
b.add("common");Set<String> inAOnly = new HashSet<String>(a);
inAOnly.removeAll(b);
System.out.println("A Only: " + inAOnly );Set<String> inBOnly = new HashSet<String>(b);
inBOnly .removeAll(a);
System.out.println("B Only: " + inBOnly );Set<String> common = new HashSet<String>(a);
common.retainAll(b);
System.out.println("Common: " + common);

输出:

A Only: [a, a2]
B Only: [b, b2]
Common: [common1]

处理三个或更多集合
处理两个以上的集合时,这个问题有些棘手,但是可以很简单地以通用的方式解决,如下所示:

计算通用元素
计算公共元素很容易,并且即使有大量集合,此代码也将始终如一地执行。

public static void main(String[] args) {List<String> a = Arrays.asList("a", "b", "c");List<String> b = Arrays.asList("a", "b", "c", "d");List<String> c = Arrays.asList("d", "e", "f", "g");List<List<String>> lists = new ArrayList<List<String>>();lists.add(a);System.out.println("Common in A: " + getCommonElements(lists));lists.add(b);System.out.println("Common in A & B: " + getCommonElements(lists));lists.add(c);System.out.println("Common in A & B & C: " + getCommonElements(lists));lists.remove(a);System.out.println("Common in B & C: " + getCommonElements(lists));
}public static <T> Set<T> getCommonElements(Collection<? extends Collection<T>> collections) {Set<T> common = new LinkedHashSet<T>();if (!collections.isEmpty()) {Iterator<? extends Collection<T>> iterator = collections.iterator();common.addAll(iterator.next());while (iterator.hasNext()) {common.retainAll(iterator.next());}}return common;
}

输出:

Common in A: [a, b, c]
Common in A & B: [a, b, c]
Common in A & B & C: []
Common in B & C: [d]

计算独特元素
计算唯一元素与计算通用元素一样简单。 请注意,此代码的性能将随着您添加大量集合而降低,尽管在大多数实际情况下都没有关系。 我猜想有一些方法可以优化它,但是由于我没有遇到问题,所以我没有打扰tryin。 正如克努斯(Knuth)著名的说法 :“我们应该忘记效率低下的问题,大约有97%的时间是这样:过早的优化是万恶之源”。

public static void main(String[] args) {List<String> a = Arrays.asList("a", "b", "c");List<String> b = Arrays.asList("a", "b", "c", "d");List<String> c = Arrays.asList("d", "e", "f", "g");List<List<String>> lists = new ArrayList<List<String>>();lists.add(a);System.out.println("Unique in A: " + getUniqueElements(lists));lists.add(b);System.out.println("Unique in A & B: " + getUniqueElements(lists));lists.add(c);System.out.println("Unique in A & B & C: " + getUniqueElements(lists));lists.remove(a);System.out.println("Unique in B & C: " + getUniqueElements(lists));
}public static <T> List<Set<T>> getUniqueElements(Collection<? extends Collection<T>> collections) {List<Set<T>> allUniqueSets = new ArrayList<Set<T>>();for (Collection<T> collection : collections) {Set<T> unique = new LinkedHashSet<T>(collection);allUniqueSets.add(unique);for (Collection<T> otherCollection : collections) {if (collection != otherCollection) {unique.removeAll(otherCollection);}}}return allUniqueSets;
}

输出:

Unique in A: [[a, b, c]]
Unique in A & B: [[], [d]]
Unique in A & B & C: [[], [], [e, f, g]]
Unique in B & C: [[a, b, c], [e, f, g]]

这里的所有都是它的。 随意使用此代码,无论您喜欢什么,如果有任何改进或建议,请发表评论。 当我们分享知识和经验时,开发人员都将从中受益。

参考: 计算多个集合中的公共和唯一元素– Java和我们的JCG合作伙伴   Carfey软件博客博客上的Craig Flichel。


翻译自: https://www.javacodegeeks.com/2012/03/common-and-unique-elements-in-multiple.html

js删除两个集合中共同元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

花了一天的时间给粉丝做了一个小米官网(高仿)

身为前端程序员&#xff0c;经常会找几个官网试试手&#xff0c;哈哈&#xff0c;这次拿小米官网试试手吧。 目录 效果图&#xff1a; 项目结构 index.html index.css js 下载地址&#xff1a;点我下载 效果图&#xff1a; 项目结构 index.html <!DOCTYPE html> &l…

MySQL分区管理

以下是我看MySQL官方文档的时候整理的笔记&#xff0c;仅作参考保留。RANGE,LIST分区管理1:为未分区表创建分区 ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2; 2:删除某个分区的数据 ALTER TABLE tr DROP PARTITION p2; 3:为分区表添加一个分区 ALTER TABLE members AD…

Java EE 8 MVC:Ozark入门

大约一年前&#xff0c; 针对Java EE 8宣布了一个新的基于动作的MVC框架&#xff0c;简称为MVC。 MVC&#xff08;在JSR 371中指定&#xff09;基于JAX-RS&#xff0c;并与Java EE技术&#xff08;如CDI和Bean验证&#xff09;集成。 MVC 1.0的参考实现是Ozark 。 这是我计划编…

uniapp踩坑指南之坑多到写不完

1、sticky:到达指定位置时&#xff0c;就停留在那里不动了。当发现可以走时&#xff0c;立马就走了。 如果走不了就不会动了&#xff0c;就会一直在那里。 https://www.cnblogs.com/byeyear/p/11999334.html 设置了sticky定位的元素相对于第一个定位不为static的父级元素的位置…

小程序引入百度地图与uni.getLocation的使用

一、小程序引入百度地图 1、当你不需要引入整个地图展示&#xff0c;只需要引入某些功能的时候&#xff0c;可以直接调用服务端api。 2、访问百度地图的任何api都需要密钥。 流程&#xff1a; 3、在小程序端配置请求合法域名&#xff1a;https://api.map.baidu.com 4、直接使…

当年上大学时,编程老师让我们用html+CSS实现一个天猫官网

纯用htmlcss实现一个天猫首页还是挺考验基本功的&#xff0c;完全考验自己的CSS功底。 目录 效果图 项目结构 index.html 源码下载&#xff1a;点我下载 效果图 项目结构 主要由htmlcss组成。 index.html <!doctype html> <html lang"en"><head&g…

微服务实战系列之Dubbo(上)

前言 随着一年一度冬至的到来&#xff0c;2023的步伐也将远去。而博主的系列文章&#xff0c;也将从今天起&#xff0c;越来越聚焦如何构建微服务“内核”上。前序系列文章几乎囊括了微服务的方方面面&#xff0c;无论使用什么框架、组件或工具&#xff0c;皆可拿来用之。 那么…

多线程图解

关于多线程一直是我们学习iOS的一个重点&#xff0c;不仅是面试中经常被问到的问题&#xff0c;而且我们开发过程过程中经常会用到的技术&#xff0c;下面是一张关于多线程的图解&#xff0c;希望可以帮助大家学习多线程的开发。 转载于:https://www.cnblogs.com/lyy-5518/p/53…

spring作业_Spring和石英:多作业计划服务

spring作业作业调度对于应用程序来说是如此重要。 尤其是在大型项目中&#xff0c;处理大量工作可能是一个问题。 Spring和Quartz为解决该问题带来了巨大的好处。 本文展示了如何通过使用Spring和Quartz轻松地计划多个作业。 二手技术&#xff1a; JDK 1.6.0_21 春天3.1.1 石…

react常用知识点总结

1、什么是jsx JSX是JavaScript的扩展语法,这种<></>标签的写法就是 JSX。JSX 编写的组件通过预处理器 babel 解析后,再交给 React 库渲染到指定父容器下,形成最终html页面,供浏览器解析和显示。 JSX会被babel编译为&#xff1a;React.createElement()&#xff0c…

今日工作小结

1)用xib自定义cell写tableviewDemo代码&#xff0c;转模型&#xff0c;cell重用 见本地develop-demo-FriendTableViewDemo 2)textview的内容不定格显示&#xff0c;这好似用导航跳转过去&#xff0c;他会减去64像素&#xff0c;也就是导航的高度都是ScrollView引起的&#xff0…

全球数据一致性,事务,微服务和Spring Boot / Tomcat / Jetty

我们通常会构建需要一起执行以下几项操作的应用程序&#xff1a;调用后端&#xff08;微&#xff09;服务&#xff0c;写入数据库&#xff0c;发送JMS消息等。但是&#xff0c;如果在调用其中之一时出错&#xff0c;会发生什么情况&#xff1f;远程资源&#xff0c;例如&#x…

前端导入导出文件

一、导出 1、返回值是url&#xff1a;创建个a标签即可 printRecord(params).then((response) > {if (response.success) {let a document.createElement(a);//创建a标签//从新页面打开&#xff0c;下载的话不需要这个&#xff0c;打开一个图片需要从新页面打开a.setAttrib…

选取文档元素的API

除了现在常用的选取API 1 document.getElementById() 2 document.getElementsByName() 3 document.getElementsByTagName() 4 ... 新增的API 主要是  document.querySelector(div>ul)  document.querySelectorAll(div>ul>li) 这两个API的强大之处在于能像CSS选…

vue进阶

1、vue-cli 使用 在开发中&#xff0c;需要打包的东西不止是js、css、html。还有更多的东西要处理&#xff0c;这些插件和加载器如果我们一一去添加就会比较麻烦&#xff0c;vue官方提供了一个快速搭建vue项目的脚手架&#xff0c;使用它能快速的构建一个web工程模板。 官网&…

每天一个linux命令(1):ln 命令

每天一个linux命令&#xff08;35&#xff09;&#xff1a;ln 命令 ln 是linux中又一个非常重要命令&#xff0c;它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录&#xff0c;用到相同的文件时&#xff0c;我们不需要在 每一个需要的目录下都放…

ehcache 程序_将Ehcache添加到Openxava应用程序

ehcache 程序介绍 本文介绍如何在Openxava应用程序上快速启用Ehcache&#xff0c;从而提高性能。 查看实体及其图形时&#xff0c;将加载关系。 添加第二级缓存可加快关联元素的检索速度&#xff0c;因为已加载的元素是从缓存而不是数据库中检索的。 最终&#xff0c;该页面解…

Diff 算法核心原理

什么是虚拟DOM 讲Diff算法前&#xff0c;我先给大家讲一讲什么是虚拟DOM吧。这有利于后面大家对Diff算法的理解加深。 虚拟DOM是一个对象&#xff0c;一个什么样的对象呢&#xff1f;一个用来表示真实DOM的对象&#xff0c;要记住这句话。我举个例子&#xff0c;请看以下真实…

比较Java 8中的命令式和功能性算法

Mario Fusco的流行推文令人印象深刻&#xff0c;显示了类似算法的命令性和功能性方法之间的主要区别实际上是&#xff1a; 势在必行–功能分离pic.twitter.com/G2cC6iBkDJ — Mario Fusco&#xff08;mariofusco&#xff09; 2015年3月1日 两种算法都做同样的事情&#xff0…

mvc的视图中显示DataTable的方法

mvc的视图中显示DataTable的方法&#xff1a; 不断的循环画出table {ViewBag.Title "ShowDataTable"; } using System.Data; model Models.ConModel{var table Model.ExcelTable as DataTable; }<script src"~/Scripts/My97DatePicker/WdatePicker.js"…