【JAVA - List】差集removeAll() 四种方法实现与优化

一、场景:

二、结论:

1. 四种方法耗时

三、代码:


一、场景:

  • 求差集 List1 - Lsit2

二、结论:

1. 四种方法耗时

初始条件方法名方法思路耗时

List1.size=319418

List2.size=284900

List..removeAll(Lsit2)1036987ms
removeAll_01List.contains()614859ms
removeAll_02运用Set 150ms推荐
removeAll_03用Set.contains()再优化112ms推荐

 

三、代码:

package com.privatecloud.core.util.collections;import com.alibaba.fastjson2.JSON;
import com.privatecloud.core.util.file.FileIOUtil;
import com.privatecloud.core.util.file.FilesReadUtil;
import com.privatecloud.core.util.file.FilesUtil;
import lombok.extern.slf4j.Slf4j;import java.io.IOException;
import java.util.*;@Slf4j
public class ListUtils<T> {public List<T> removeAll_01(List<T> source, List<T> destination) {List<T> result = new LinkedList<T>();for (T t : source) {if (!destination.contains(t)) {result.add(t);}}return result;}/*** 2,运用Set可以去重这一特性。效率有明显提升** @param source* @param destination* @return*/public List<T> removeAll_02(List<T> source, List<T> destination) {List<T> result = new LinkedList<T>();Map<T, Integer> sourceMap = new HashMap<T, Integer>();for (T t : source) {if (sourceMap.containsKey(t)) { //原集合中的重复值sourceMap.put(t, sourceMap.get(t) + 1);} else {sourceMap.put(t, 1);}}Set<T> all = new HashSet<T>(destination);for (Map.Entry<T, Integer> entry : sourceMap.entrySet()) {T key = entry.getKey();Integer value = entry.getValue();if (all.add(key)) {for (int i = 0; i < value; i++) {result.add(key);}}}return result;}/*** 3,用Set.contains()再优化** @param source* @param destination* @return*/public List<T> removeAll_03(List<T> source, List<T> destination) {List<T> result = new LinkedList<T>();Set<T> destinationSet = new HashSet<T>(destination);for (T t : source) {if (!destinationSet.contains(t)) {result.add(t);}}return result;}}

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

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

相关文章

LINQ的内部联接、分组联接和左外部联接

最近在优化定时任务相关的代码&#xff0c;建议是把总查询放到内存中去坐&#xff0c;尽量减少打开的数据库连接 1. 内连接 指的是结果生成两张表可以连接的部分 private void button1_Click_1(object sender, EventArgs e){//初始化Student数组Student[] arrStu new Stude…

群晖Cloud Sync数据同步到百度云、另一台群晖、nextcloud教程

群晖Cloud Sync数据同步到百度云、另一台群晖、nextcloud教程 一、群晖套件中下载Cloud Sync 二、同步到百度云盘 打开Cloud Sync&#xff0c;点击左上角的号&#xff0c;云供应商选择百度云。 这里可以选择双向备份&#xff0c;也可以只上穿到百度云的仅上传本地更改。因为百…

STM32H7 Azure RTOS

STM32H7 是意法半导体&#xff08;STMicroelectronics&#xff09;推出的一款高性能微控制器系列&#xff0c;基于 Arm Cortex-M7 内核。它具有丰富的外设和高性能计算能力&#xff0c;适用于各种应用领域。 Azure RTOS&#xff08;原名 ThreadX&#xff09;是一款实时操作系统…

第36章_瑞萨MCU零基础入门系列教程之步进电机控制实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

LeetCode题解:1720. 解码异或后的数组,异或,JavaScript,详细注释

原题链接&#xff1a; https://leetcode.cn/problems/decode-xored-array/ 解题思路&#xff1a; 异或有如下性质&#xff1a; a ^ a 0a ^ 0 aa ^ b b ^ a 根据题意&#xff0c;已知encoded[i - 1] arr[i - 1] ^ arr[i]&#xff0c;可以做如下转换&#xff1a; encoded[i…

python爬虫经典实例(二)

在前一篇博客中&#xff0c;我们介绍了五个实用的爬虫示例&#xff0c;分别用于新闻文章、图片、电影信息、社交媒体和股票数据的采集。本文将继续探索爬虫的奇妙世界&#xff0c;为你带来五个全新的示例&#xff0c;每个示例都有其独特的用途和功能。 1. Wikipedia数据采集 爬…

Redis 7 第九讲 微服务集成Redis 应用篇

Jedis 理论 Jedis是redis的java版本的客户端实现&#xff0c;使用Jedis提供的Java API对Redis进行操作&#xff0c;是Redis官方推崇的方式&#xff1b;并且&#xff0c;使用Jedis提供的对Redis的支持也最为灵活、全面&#xff1b;不足之处&#xff0c;就是编码复杂度较高。 …

【区块链 | IPFS】IPFS cluster私有网络集群搭建

对于联盟链的业务中搭建一个私有网络的 IPFS 集群还是很有必要的,私有网络集群允许 IPFS 节点只连接到拥有共享密钥的其他对等节点,网络中的节点不响应来自网络外节点的通信。 IPFS-Cluster 是一个独立的应用程序和一个 CLI 客户端,它跨一组 IPFS 守护进程分配、复制和跟踪 …

易基因: MeRIP-seq等揭示组蛋白乙酰化和m6A修饰在眼部黑色素瘤发生中的互作调控|肿瘤研究

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 组蛋白去乙酰化抑制剂(HDACis)在多种恶性肿瘤中显示出令人鼓舞的结果。N6-甲基腺嘌呤(m6A)是最普遍的mRNA修饰&#xff0c;在肿瘤发生调控中起重要作用。然而&#xff0c;对组蛋白乙酰化…

HDMI 直通 ILA 调试实验

FPGA教程学习 第十四章 HDMI 直通 ILA 调试实验 文章目录 FPGA教程学习前言实验原理程序设计实验过程实验尝试总结TODO 前言 HDMI 输入直通到 HDMI 输出的显示&#xff0c;完成一个简单的 HDMI 输入输出检测。 实验原理 开发板 HDMI 输出接口芯片使用 ADV7511&#xff0c;HD…

穿山甲报错 splashAdLoadFail data analysis error

使用swift接入穿山甲&#xff0c;未接入GroMore&#xff0c;这个时候如果代码位配置错误会导致如下错误&#xff1a; splashAdLoadFail(_:error:) Optional(“Error Domaincom.buadsdk Code98764 “data analysis error” UserInfo{NSLocalizedDescriptiondata analysis error,…

什么是区块链,解释区块链的原理和应用场景

1、什么是区块链&#xff0c;解释区块链的原理和应用场景。 区块链是一种分布式数据库&#xff0c;它由一系列按照时间顺序排列的数据块组成&#xff0c;并采用密码学方式保证不可篡改和不可伪造。区块链技术最初起源于比特币&#xff0c;作为比特币的底层技术&#xff0c;用于…

Vue 3.3 发布

本文为翻译 原文地址&#xff1a;宣布推出 Vue 3.3 |The Vue Point (vuejs.org) 今天我们很高兴地宣布 Vue 3.3 “Rurouni Kenshin” 的发布&#xff01; 此版本侧重于开发人员体验改进 - 特别是 TypeScript 的 SFC <script setup> 使用。结合 Vue Language Tools&…

HP惠普暗影精灵8P笔记本OMEN 17.3 英寸游戏本 17-ck1000(509V8AV)原厂Win11系统22H2

适用型号&#xff1a; 17-ck1000TX、17-ck1001TX、17-ck1002TX、17-ck1003TX、17-ck1004TX、17-ck1006TX、17-ck1007TX、17-ck1008TX 原装出厂系统自带所有驱动、出厂主题壁纸、Office办公软件、MyHP、惠普电脑管家、OMEN Command Center等预装程序 链接&#xff1a;https:/…

Kernel for SQL Database Recovery 21.1 Crack

SQL Server恢复工具 Kernel for SQL Database Recovery 21.1 具有针对不同 SQL Server 版本的全面恢复选项。它具有预览和选择功能来恢复精确的数据库对象。 好处 SQL 数据库恢复可为您带来多种好处。 完全恢复所有数据库组件 将损坏的 MDF/NDF 文件有效恢复到 Live SQL Serve…

DC/DC开关电源学习笔记(五)开关电源的主要技术指标

(五)开关电源的主要技术指标 1.输入参数2.输出参数3.效率4.电压调整率和负载调整率5.动态特性:负载突变时输出电压的变化6.电源启动时间(Set-Up Time)与保持时间(Hold-Up Time)1.输入参数 输入电压大小,交流还是直流,相数,频率等。 2.输出参数 输出功率,输出电压,输出…

SVN 索引版本与打包版本号不匹配

今天突然遇到了一个问题&#xff0c;SVN上传不了&#xff0c;错误提示如下&#xff1a; 解决方法&#xff1a; 1.其实&#xff0c;这是SVN库不小心搞坏了&#xff0c;只能重新再创建一个SVN仓库了。

linux7上powerpath卸载

umount挂接点后&#xff0c;直接卸载powerpath告警 [roothydb2 ~]# rpm -qa |grep EMCpower EMCpower.LINUX-6.3.0.01.00-001.ol7.x86_64 [roothydb2 ~]# rpm -e EMCpower.LINUX-6.3.0.01.00 Unable to remove devices from the PowerPath configuration Please make sure no …

C++日期类实现(联系类和对象)

目录 一.6个默认成员函数 二.基本功能函数 三.日期与天数的加减 四.前后置和-- 五.比较运算符重载 六.日期减日期 七.全部代码 1.Date.h 2.Date.cpp C初学者都可以在学习完类和对象后写一个日期类&#xff0c;以下是实现细节。 一.6个默认成员函数 对于日期类默认成员函…

WPS或EXCEL表格单元格下拉快捷选择项修改及设置方法

WPS或新版本EXCEL的设置下拉选项的方法是.点击一个单元格,菜单上选择数据,下拉列表即可设置,双击文字可编辑 EXCEL 旧的版本不同,可能有不同方法 方法一, 1.在空白区域里面&#xff0c;准备好需要填入下拉菜单里面的内容。 2.选中一个需要添加下拉菜单的单元格&#xff0c;然后…