高频面试题:合并两个List并去重

欢迎关注微信公众号:互联网全栈架构

合并两个List中并去掉重复的元素,有好几种方法,我们来看看常见的三种:

一、使用HashSet

HashSet是一个没有重复元素的集合,可以利用这个特性,把List中的元素逐一添加到HashSet中,最终得到的就是没有重复元素的结果:

package com.sample.algo.list;import java.util.*;// 利用Hashset元素不重复的特性
public class MergeWithHash {public static void main(String[] args) {// 这里要记得new一个ArrayListList<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));List<Integer> list2 = new ArrayList<>(Arrays.asList(4, 5, 6));Set<Integer> set = new HashSet<>();for(Integer element: list1){set.add(element);}for(Integer element: list2){set.add(element);}List<Integer> result = new ArrayList<>(new HashSet<>(set));System.out.println("去重后的List:" + result);}
}

运行上面的程序,打印的结果如下:

f179b8dbd234a43e70f9de73441a1a1b.png

二、基于Stream

JDK8新增的特性流式操作Stream,对于很多集合处理的场合非常有用:

package com.sample.algo.list;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;// 基于Stream来合并并去重两个List
public class MergeWithStream {public static void main(String[] args) {List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));List<Integer> list2 = new ArrayList<>(Arrays.asList(4, 5, 6));// 把List转成StreamStream<Integer> stream1 = list1.stream();Stream<Integer> stream2 = list2.stream();// 合并List并去重List<Integer> result = Stream.concat(stream1, stream2).distinct().collect(Collectors.toList());System.out.println("去重后的List:" + result);}
}

二、使用Map的merge功能

List转成Map的时候,可以指定合并函数,这样就可以把相同的key进行去重操作:

package com.sample.algo.list;import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;// 使用mergeFunction来进行合并
public class MergeWithMap {public static void main(String[] args) {List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));List<Integer> list2 = new ArrayList<>(Arrays.asList(4, 5, 6));// 合并成一个listList<Integer> listAll = new ArrayList<>(list1);listAll.addAll(list2);// 这样写会抛出Duplicate key异常
//        Map<Integer, Integer> map = listAll.stream().
//                collect(Collectors.toMap(Integer::intValue, (p)->p));// 处理相同key的情况,也就是取其中一个Map<Integer, Integer> map = listAll.stream().collect(Collectors.toMap(Integer::intValue, Function.identity(), (first, second)->second));List<Integer> result = new ArrayList<>(map.keySet());System.out.println("去重后的List:" + result);}
}

推荐阅读:

揭开Java线程池的神秘面纱

彻底搞懂MySQL的执行计划

图解MySQL中的各种JOIN:再也不用担心记不住了

初级工程师一脸懵逼,高级工程师笑而不语

数据同步的利器:Canal

拒绝空谈:实例演示MySQL事务隔离级别

聊聊MySQL中的死锁

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

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

相关文章

简单几步制作翻页电子画册

翻页电子画册是一种非常流行的电子书形式&#xff0c;它能够以生动、美观、有趣的方式展示您的内容。如果您想要制作自己的翻页电子画册&#xff0c;以下是一些简单的步骤&#xff0c;可以帮助您轻松上手。 首先&#xff0c;你需要一款在线制作电子杂志平台。比如FLBOOK&#x…

java8开发常用的日期操作,纯干货分享

首先介绍java8关于日期和时间比较常用的一些类&#xff1a; Java 8 推出了全新的日期时间API&#xff0c;在教程中我们将通过一些简单的实例来学习如何使用新API。 Java处理日期、日历和时间的方式一直为社区所诟病&#xff0c;将 java.util.Date设定为可变类型&#xff0c;以…

5G阅信助力互联网行业:XX出行-出票通知,案例分析

XX出行日常有大量业务通知短信下发&#xff0c;用户触达频次和用户打开率都比较高&#xff0c;但原短信无法带来附加营销增值&#xff0c;通过阅信增值服务消息将两者结合起来&#xff0c;可实现业务的多渠道引流&#xff0c;开拓了新的渠道和方式。 项目概述&#xff1a; 1. 项…

WAZUH的安装、设置代理

wazuh安装 wazu的安装分为以下两种方式 官方文档&#xff1a;https://wazuh.com/blog/detecting-common-linux-persistence-techniques-with-wazuh/ 1、自定义安装 这种方式就是一步一步的安装 直接参考官方文档&#xff1a; 这里就不详细介绍了 2、直接下载打包好的虚拟机…

vscode调用HTML文件

vscode实现对HTML文件调用 创建html文件下载拓展内容点击拓展查找需要的拓展 导入html代码设置默认打开浏览器运行结果参考文献 做数据库课设的内容,尝试一些自己没有接触过的东西,了解如何创建一个网站以及数据库的一个应用 创建html文件 创建一个html的文件,加入后缀名 下…

从仿写持久层框架到MyBatis核心源码阅读

接上篇手写持久层框架&#xff1a;https://blog.csdn.net/liwenyang1992/article/details/134884703 MyBatis源码 MyBatis架构原理&主要组件 MyBatis架构设计 MyBatis架构四层作用是什么呢&#xff1f; API接口层&#xff1a;提供API&#xff0c;增加、删除、修改、查询…

『番外篇八』SwiftUI 脑洞大开实现“另类”视图跟随方法

概览 在 SwiftUI 的开发中,我们时常需要用指尖丝滑般地操作指定视图:比如,我们需要在拖动视图后让它自动归位,或者拖动一个视图时让另一个视图跟随它移动。 我们随后将会详细讨论上述两个 SwiftUI 中与视图移动相关场景的实现。 在本篇博文中,您将学到如下内容: 概览1.…

matlab导出高清图片,须经修改后放入latex(例如添加文字说明,matlab画图不易操作)

一、背景 我们在写文章时&#xff0c;使用matlab画图后&#xff0c;如果不需要对图片进行额外修改或调整&#xff0c;例如添加文字说明&#xff0c;即可直接从matlab导出eps格式图片&#xff0c;然后插入到latex使用。 通常latex添加图片&#xff0c;是需要eps格式的。 但很…

大数据爱好者福音:Kudu框架学习网站,助你一臂之力!

介绍&#xff1a;Kudu是由Cloudera开源的列式存储引擎&#xff0c;专为处理大数据而设计。它是为了解决Hadoop生态系统中的一些挑战而被引入的&#xff0c;如流式实时计算结果的更新和时间序列相关应用等需求。 Kudu具有几个显著的特点&#xff1a;首先&#xff0c;它是用C语言…

【Vue2+3入门到实战】(15)VUE路由入门声明式导航的基本使用与详细代码示例

目录 一、声明式导航-导航链接1.需求2.解决方案3.通过router-link自带的两个样式进行高亮4.总结 二、声明式导航-两个类名1.router-link-active2.router-link-exact-active3.在地址栏中输入二级路由查看类名的添加4.总结 三、声明式导航-自定义类名&#xff08;了解&#xff09…

JavaWeb乱七八糟的报错及其原因和解决办法(持续更新中。。。)

报错&#xff1a; com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.原因&#xff1a;MySQL服务关闭…

Elasticsearch-8.11.1 (2+1)HA(高可用)集群部署

目录 一、环境描述 二、安装 ES 2.1 下载Elasticsearch 2.2 解压Elasticsearch 2.3 创建es服务账号/密码 2.3 修改服务器配置 2.4 配置节点 2.4.1 配置说明 2.4.2 配置高可用集群 2.4.2.1 maser节点服务配置 2.4.2.2 node1 节点服务配置 2.4.2.3 node2 节点服务配置…