java面试题(5):List去重方案

news2024/9/22 13:28:07

本文总结了 5 种去除List重复元素的方法:

  • for 循环添加去重
  • for 双循环去重
  • for 循环重复坐标去重
  • Set 去重
  • Stream 去重

最后两种方案最简单,都是一行代码就能搞定的

1 for循环添加去重

package com.example.demo.controller;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class listtest2 {

    public static List<String> initList = Arrays.asList(
            "张三",
            "李四",
            "张三",
            "周一",
            "刘四",
            "李强",
            "李白",
            "张三",
            "李强",
            "王五"
    );

    public static void main(String[] args) {
        List<String> list = new ArrayList(initList);
        List<String> list2 = new ArrayList<>();
        for (String element : list) {
            if (!list2.contains(element)) {
                list2.add(element);
            }
        }
        System.out.println(list2);
    }

}

这个是最基本的实现了,创建一个空的 List,添加前判断一下存在不存在,不存在才添加,这样就保证了元素不重复。

输出结果:

 

2 for双循环去重

package com.example.demo.controller;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class listtest2 {

    public static List<String> initList = Arrays.asList(
            "张三",
            "李四",
            "张三",
            "周一",
            "刘四",
            "李强",
            "李白",
            "张三",
            "李强",
            "王五"
    );

    public static void main(String[] args) {
        List<String> list = new ArrayList(initList);
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = list.size() - 1; j > i; j--) {
                if (list.get(j).equals(list.get(i))) {
                    list.remove(j);
                }
            }
        }
        System.out.println(list);
    }

}

利用双循环,判断是否有相等的,再进行移除。

输出结果:

 

3 for循环重复坐标去重

package com.example.demo.controller;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class listtest2 {

    public static List<String> initList = Arrays.asList(
            "张三",
            "李四",
            "张三",
            "周一",
            "刘四",
            "李强",
            "李白",
            "张三",
            "李强",
            "王五"
    );

    public static void main(String[] args) {
        List<String> list = new ArrayList(initList);
        List<String> list2 = new ArrayList(initList);
        for (String element : list2) {
            if (list.indexOf(element) != list.lastIndexOf(element)) {
                list.remove(list.lastIndexOf(element));
            }
        }
        System.out.println(list);
    }

}

复制一个 list2,再循环 List2,判断 list 中的元素的首尾出现的坐标位置是否一致,如果一致,则说明没有重复的,否则重复,再删除重复的位置的元素。

输出结果:

 

4 Set去重

package com.example.demo.controller;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

public class listtest2 {

    public static List<String> initList = Arrays.asList(
            "张三",
            "李四",
            "张三",
            "周一",
            "刘四",
            "李强",
            "李白",
            "张三",
            "李强",
            "王五"
    );

    public static void main(String[] args) {
        List<String> list = new ArrayList(initList);
        List<String> list2 = new ArrayList(new HashSet(list));
        System.out.println(list2);
    }

}

我们知道 Set 是不包含重复元素的,把 List 先装进 HashSet,然后再装回来,这样就保证了元素的不重复。

输出结果:

 

结果虽然正确,但元素顺序和原始 List 不一致,如果要保证顺序性,可以把 HashSet 换成 LinkedHashSet:

package com.example.demo.controller;

import java.util.*;

public class listtest2 {

    public static List<String> initList = Arrays.asList(
            "张三",
            "李四",
            "张三",
            "周一",
            "刘四",
            "李强",
            "李白",
            "张三",
            "李强",
            "王五"
    );

    public static void main(String[] args) {
        List<String> list = new ArrayList(initList);
        List<String> list2 = new ArrayList(new LinkedHashSet(list));
        System.out.println(list2);
    }

}

输出结果:

 

这下顺序对了吧,LinkedHashSet 可以保证元素的顺序性!

5 Stream去重

package com.example.demo.controller;

import java.util.*;
import java.util.stream.Collectors;

public class listtest2 {

    public static List<String> initList = Arrays.asList(
            "张三",
            "李四",
            "张三",
            "周一",
            "刘四",
            "李强",
            "李白",
            "张三",
            "李强",
            "王五"
    );

    public static void main(String[] args) {
        List<String> list = new ArrayList(initList);
        list = list.stream().distinct().collect(Collectors.toList());
        System.out.println(list);
    }

}

输出结果:

 

利用 Stream 的 distinct 方法去重,这个方法也十分简单,一行代码搞定

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

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

相关文章

【云原生kubernetes】k8s Ingress使用详解

一、什么是Ingress 在上一篇关于k8s之service的使用一篇中提到&#xff0c;Service对集群之外暴露服务的主要方式有两种&#xff0c;NotePort和LoadBalancer&#xff0c;但这两种方式&#xff0c;都有一定的缺点&#xff0c;具体来说&#xff1a; NodePort 会占用很多集群机器…

雷达编程实战之恒虚警率(CFAR)检测

在雷达系统中&#xff0c;目标检测是一项非常重要的任务。检测本身非常简单&#xff0c;它将信号与阈值进行比较&#xff0c;超过阈值的信号则认为是目标信号&#xff0c;所以目标检测的真正工作是寻找适当的阈值。由于目标误检的严重后果&#xff0c;因此雷达系统希望有一个检…

【Python网络编程】利用Python进行TCP、UDP套接字编程

之前实现了Java版本的TCP和UDP套接字编程的例子&#xff0c;于是决定结合Python的学习做一个Python版本的套接字编程实验。 流程如下&#xff1a; 1.一台客户机从其标准输入&#xff08;键盘&#xff09;读入一行字符&#xff0c;并通过其套接字将该行发送到服务器。 2.服务…

2023最新版本会声会影下载及新增功能详情

会声会影在用户的陪伴下走过23余载&#xff0c;经过上百个版本的优化迭代&#xff0c;已将操作极大简易化&#xff0c;会声会影拥有公认的上手口碑。只需将想要的效果拖拽到轨道上&#xff0c;一拖一放间快速成片。专业工具助力视频剪辑操作简单&#xff0c;功能同样强大&#…

数据库事务AICD以及隔离级别

目录一.事务的ACID二.隔离级别三.并发事务中的问题1.脏写2.脏读3.不可重复读4.幻读四.MVCC机制五.读锁与写锁六.大事务的影响七.事务优化一.事务的ACID 原子性(Atomicity)&#xff1a;一个事务中的所有操作&#xff0c;要么全部成功&#xff0c;要么失败全部回滚&#xff0c;不…

什么是压敏电阻

下面的这些都是压敏电阻&#xff0c;常常用在一些电源和信号的浪涌防护电路中。这个是它的电路符号&#xff0c;电路中常用RV表示。当压敏电阻两端电压小于压敏电压时&#xff0c;压敏电阻相当于一个阻值非常大的电阻。当压敏电阻两端电压大于压敏电压时&#xff0c;压敏电阻相…

【数据结构】——环形队列

文章目录一.环形队列的定义及其特点二.使用数组来实现环形队列1.创建一个队列2.初始化队列3. 判断环形队列是否为空4.判断环形队列是否已满5. 向循环队列插入元素&#xff0c;插入成功返回真6.删除环形链表的数据7. 取队头元素8.取队尾元素8.释放空间总结一.环形队列的定义及其…

集算器连接外部库

1. 配置jar包将以下jar包从报表的类路径&#xff08;【安装根目录】\report\lib或【安装根目录】\report\web\webapps\demo\WEB-INF\lib&#xff09;中拷贝到集算器目录&#xff08;【安装根目录】\esProc\ extlib\mongoCli&#xff09;&#xff1b;润乾外部库核心jar为:scu-mo…

AI制药 - TMScore(US-align)、RMSD、Sequence 源码

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/129125467 参考文档:Nature Methods | 蛋白、RNA、DNA及其复合物结构的比对算法US-align 官网地址:https://zhanggroup.org/US-align/ TMScore TMScore,…

【离散数学】2. 集合论

1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 集合论&#xff1a;集合–>关系–>函数 n元组的理解&#xff1a;有n个集合&#xff0c;从每个集合中抽取一个元素&#xff0c;组成一个n元组 笛卡尔积的理解&#xff1a;笛卡尔积是n个集合能构成的所有互不相等的n元组的集合 …

软考考试真题精选

1、&#xff08; &#xff09;不属于项目范围说明书的内容A&#xff0e;项目的可交付成果 B&#xff0e;项目的假设条件 C&#xff0e;干系人清单 D&#xff0e;验收标准答案&#xff1a;C2、MPLS根据标记对分组进行交换&#xff0c;其标记中包含 &#xff08; &#xff09; 。…

使用maven搭建父子工程项目

创建父子工程&#xff0c;可以通过父工程来引入jar&#xff0c;定义统一的版本号等。更方便对整个项目的jar包实现统一化管理&#xff0c;让项目的层次更加清晰。一、创建父工程第一步&#xff1a;file–>new–>project–>maven默认使用jdk1.8&#xff0c;不引入任何j…

2.20计算机如何工作

一.计算机组成1.冯诺依曼体系CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个用户汇报结果的设备内存和外存的区别(面试)访问速度:内存快,外存慢存储空间:内存小,外…

AI 看唇语,在嘈杂场景的语音识别准确率高达75%

事实上&#xff0c;研究表明视觉线索在语言学习中起着关键的作用。相比之下&#xff0c;人工智能语言识别系统主要是建立在音频上。而且需要大量数据来训练&#xff0c;通常需要数万小时的记录。 为了研究视觉效果&#xff0c;尤其是嘴部动作的镜头&#xff0c;是否可以提高语…

关于MySQL镜像构建过程中添加自动初始化数据库

需求描述一般而言&#xff0c;我们在拉取了 mysql 镜像并运行之后&#xff0c;其中的并不会存在我们自定义的数据库&#xff0c;都是在镜像运行后&#xff0c;自己主动导入数据库&#xff0c;那么有没有方式可以一运行 mysql 镜像&#xff0c;对应生成的 mysql 容器中就有我们自…

STM32 OTA应用开发——自制BootLoader

STM32 OTA应用开发——自制BootLoader 目录STM32 OTA应用开发——自制BootLoader前言1 环境搭建2 BootLoader工作原理以及常见分区介绍3 BootLoader的制作4 烧录下载配置5 运行测试结束语前言 什么是OTA&#xff1f; 百度百科&#xff1a;空中下载技术&#xff08;Over-the-Ai…

【Java基础】IO流

IO流 最后一定要关闭流&#xff0c;防止资源泄露 字节流 一次读取1字节&#xff0c;8比特 FileInputStream import org.junit.jupiter.api.Test;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;public class CopyBytes {pub…

2023最新网络工程师面试大全,全都答得上offer绝对拿到手软

一、目录 TCP和UDP都可以实现客户端/服务端通信&#xff0c;这两个协议有何区别&#xff1f; 是第几层的协议&#xff0c;其作用是什么&#xff1f; 请说一下FTP&#xff0c;SSH&#xff0c;TELNET&#xff0c;DNS&#xff0c;HTTP&#xff0c;HTTPS&#xff0c;SMTP协议的端口…

我的三周年创作纪念日——学习不止,创作不停

机缘 最开始写文章博客&#xff0c;是为了用输出倒逼自己输入。 从校园离开后&#xff0c;才逐渐意识到学习的不容易。没有写好的教材课程、没有画好的考点重点&#xff0c;没有一起学习的同学&#xff0c;更没有明确的学习方向和路径。 数据分析方向可以学的东西太多了&…

SUMO安装并实现交通仿真Demo

sumo简介sumo是一种开源&#xff0c;微观&#xff0c;多模态的交通模拟仿真软件&#xff0c;每辆车都是明确建模的&#xff0c;有自己的路线&#xff0c;并在网络独立移动下载安装sumo前往sumo官网下载,如下图红色标注所示&#xff0c;一键安装。实现Demo3.1加载道路文件.net.x…