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

news2025/4/23 0:53:26

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

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

一、使用HashSet

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

package com.sample.algo.list;

import java.util.*;

// 利用Hashset元素不重复的特性
public class MergeWithHash {

    public static void main(String[] args) {
        // 这里要记得new一个ArrayList
        List<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转成Stream
        Stream<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));

        // 合并成一个list
        List<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.coloradmin.cn/o/1345958.html

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

相关文章

数据结构【线性表篇】(一)

数据结构【线性表篇】(一&#xff09; 文章目录 数据结构【线性表篇】(一&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录一、顺序表(一)、顺序表的定义(二)、顺序表的插入删除(三)、顺序表的查找 二、完整代码(一)、顺序表的…

C语言-第十七周做题总结-数组2

id&#xff1a;464 A.求矩阵各行元素之和 题目描述 本题要求编写程序&#xff0c;求一个给定的mn矩阵各行元素之和。 输入 输入第一行给出两个正整数m和n&#xff08;1≤m, n≤6&#xff09;。随后m行&#xff0c;每行给出n个整数&#xff0c;其间以空格分隔。 输出 每行…

元旦档首日票房超4.69亿,“下雪场尴尬”上热搜!

哇塞&#xff0c;元旦假期终于来啦&#xff01;&#x1f389;在这个喜庆的时刻&#xff0c;电影院也热闹非凡&#xff0c;据猫眼专业版数据显示&#xff0c;截至12月30日&#xff0c;2023年元旦档首日票房竟然超过了4.69亿&#xff01;这简直是个天文数字啊&#xff01;&#x…

【GOLANG】使用插件 Goanno 的方式来对方法、接口、结构体注释模板配置

直接 使用插件 Goanno 的方式来对方法、接口、结构体注释模板配置 1、简单安装 Goanno 插件 File->Settings->Plugins , 搜索 Goanno Normal Method 配置内容如下&#xff1a; // Title ${function_name} // Description ${todo} // Author mumu ${date} ${time} // Par…

【c语言】飞机大战2

1.优化边界问题 之前视频中当使用drawAlpha函数时&#xff0c;是为了去除飞机后面变透明&#xff0c;当时当飞机到达边界的时候&#xff0c;会出现异常退出&#xff0c;这是因为drawAlpha函数不稳定&#xff0c;昨天试过制作掩码图&#xff0c;下载了一个ps,改的话&#xff0c…

黑马程序员SSM框架-SpringBoot

SpringBoot简介 入门程序 也可以基于官网创建项目。 SpringBoot项目快速启动 下面的插件将项目运行所需的依赖jar包全部加入到了最终运行的jar包中&#xff0c;并将入口程序指定。 SpringBoot概述 基础配置 配置文件格式 自动提示消失解决方案。将新建的配置文件加入到配置文…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的固定帧率功能的技术背景CameraExplorer如何查看相机固定帧率功能在NEOAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过NEOAPI SDK设置相机固定…

使用anaconda创建notebook工程

1.由于每个工程使用的环境都可能不一样&#xff0c;因此一个好的习惯就是不同的工程都创建属于自己的环境&#xff0c;在anaconda中默认的环境是base&#xff1a; //括号中名字&#xff0c;代表当前的环境 (base)dragonmachine: $ conda create --nameexample2.激活环境 // 环…

Python 编辑器pycharm下载与安装

使用python语言编程&#xff0c;可以使用pycharm或者sublime等编辑器。 我这里选择pycharm编辑器。 1、下载 登录官网&#xff1a;JetBrains: Essential tools for software developers and teams 点击【Developer Tools】菜单按钮&#xff0c;可以直接找到pycharm&#xff…

高斯泼溅的全面概述

一、说明 高斯泼溅是一种用于表示 3D 场景和渲染新颖视图的方法&#xff0c;在“实时辐射场渲染的 3D 高斯泼溅”中引入。它可以被认为是 NeRF 类模型的替代品&#xff0c;就像当年的 NeRF 一样&#xff0c;高斯分布导致了许多新的研究工作&#xff0c;这些工作选择将其用作各种…

鸿蒙 Window 环境的搭建

鸿蒙操作系统是国内自研的新一代的智能终端操作系统&#xff0c;支持多种终端设备部署&#xff0c;能够适配不同类别的硬件资源和功能需求。是一款面向万物互联的全场景分布式操作系统。 下载、安装与配置 DevEco Studio支持Windows系统和macOS系统 Windows系统配置华为官方推…

Markdown之YAML效果图语法介绍(二十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

C#进阶-IIS应用程序池崩溃的解决方案

IIS是微软开发的Web服务器软件&#xff0c;被广泛用于Windows平台上的网站托管。在使用IIS过程中&#xff0c;可能会遇到应用程序池崩溃的问题&#xff0c;原因可能有很多&#xff0c;包括代码错误、资源不足、进程冲突等。本文将为大家介绍IIS应用程序池崩溃的问题分析和解决方…

缓存cache和缓冲buffer的区别

近期被这两个词汇困扰了&#xff0c;感觉有本质的区别&#xff0c;搜了一些资料&#xff0c;整理如下 计算机内部的几个部分图如下 缓存&#xff08;cache&#xff09; https://baike.baidu.com/item/%E7%BC%93%E5%AD%98 提到缓存&#xff08;cache&#xff09;&#xff0c;就…

【web安全】验证码识别-burp的captcha-killer-modified插件教程(基于百度接口)(总结一些坑)

前言 菜某分享 captcha-killer-modified插件的安装教程 整体安装教程可以看他的 安装captcha-killer-modified插件&#xff08;windospython环境&#xff09;_aptcha-killer-modified的安装-CSDN博客 但是有一点补充。 这个里面的codereg.py文件有个问题 可能是版本的问…

千里马2023年终总结-android framework实战

背景&#xff1a; hi粉丝朋友们&#xff1a; 2023年马上就过去了&#xff0c;很多学员朋友也都希望马哥这边写个年终总结&#xff0c;因为这几个月时间都忙于新课程halsystracesurfaceflinger专题的开发&#xff0c;差点都忘记了这个事情了&#xff0c;今天特别花时间来写个bl…

推荐系统中的 业务指标 覆盖率

覆盖率&#xff08;Coverage&#xff09;是推荐系统评估指标之一&#xff0c;用于衡量推荐系统是否能够覆盖物品空间中的多样性&#xff0c;即是否能够推荐系统中的每个物品都能够被推荐给用户。覆盖率通常是一个百分比&#xff0c;表示被推荐的物品占总物品集合的比例。 覆盖…

系统稳定性建设浅谈

系统稳定性是指系统在受到外部环境变化或内部参数变化时&#xff0c;能够保持其功能和性能的稳定性。它是一种系统的性能指标&#xff0c;可以用来衡量系统的可靠性和可控性。系统稳定性的高低可以反映出系统的可靠性和可控性&#xff0c;从而为系统的设计和运行提供参考。 202…

代码随想录刷题笔记(DAY4)

今日总结&#xff1a;今天把中心放在前端学习上&#xff0c;最后一个题没有完全理解&#xff0c;明天早起补上吧。勉强算完成任务。&#xff08;已补上&#xff09; Day 4 01. 两两交换链表中的节点&#xff08;No. 24&#xff09; 题目链接 代码随想录题解 1.1 题目 给你…

jmeter安装、下载

JDK安装 因为Jmeter是java开发的&#xff0c;有一个特点就是得装一个java环境才能运行 需要安装一个JDK&#xff08;建议安装版本为 8,因为企业用得最多的都是在用这个版本&#xff09; 网址&#xff1a;Java Downloads | Oracle 解压下载下来的安装包&#xff0c;到自己的目…