Java中List列表去重有序和无序的6种方法

 更新时间:2024年03月05日 15:02:16   作者:彭世瑜  
在日常的业务开发中,会遇到List中的重复数据去除掉的场景,本文就来介绍一下Java中List列表去重有序和无序的6种方法,具有一定的参考价值,感兴趣的可以了解一下

前置知识

正式开始之前,先来搞懂两组概念:无序集合和有序集合 & 无序和有序。因为接下来的方法实现中,会反复提及这两组概念,所以有必要在正式开始之前,先把它们搞清楚。

无序集合

无序集合是指,数据读取的顺序和数据插入的顺序是不一致的。例如,插入集合的顺序是:1、5、3、7,而集合的读取顺序竟然是:1、3、5、7。

有序集合

有序集合的概念和无序集合的概念正好相反,它是指集合的读取顺序和插入顺序是一致的。例如,插入数据的顺序是:1、5、3、7,那么读取的顺序也是:1、5、3、7。

有序和无序

通过上面的无序集合和有序集合,我们可以得出有序和无序的概念。 有序指的是数据的排列顺序和读取顺序符合我们的预期就叫做有序。而无序指的是数据的排列顺序和读取顺序不符合我们的预期就叫做无序。

PS:如果对于有序和无序的概念不是很清楚也没关系,通过下面的事例,我们可以进一步的理解它们的含义。

待去重列表

// 列表
List<String> list = new ArrayList<>();
list.add("Tom");
list.add("Jack");
list.add("Steve");
list.add("Tom");

System.out.println(list);
// [Tom, Jack, Steve, Tom]

HashSet去重(不保证顺序)

// 去重
Set<String> set = new HashSet<>(list);
List<String> newList = new ArrayList<>(set);

System.out.println(newList);
// [Tom, Steve, Jack]

TreeSet去重(不保证顺序)

// 去重
Set<String> set = new TreeSet<>(list);
List<String> newList = new ArrayList<>(set);

System.out.println(newList);
// [Jack, Steve, Tom]

LinkedHashSet去重(保证顺序)

// 去重
Set<String> set = new LinkedHashSet<>(list);
List<String> newList = new ArrayList<>(set);

System.out.println(newList);
// [Tom, Jack, Steve]

遍历List去重(保证顺序)

// 去重
List<String> newList = new ArrayList<>();
for (String value : list) {
    if(!newList.contains(value)){
        newList.add(value);
    }
}

System.out.println(newList);
// [Tom, Jack, Steve]

Java8中Stream流处理(保证顺序)

// 去重
List<String> newList = list.stream().distinct().collect(Collectors.toList());

System.out.println(newList);
// [Tom, Jack, Steve]

参考文章

 到此这篇关于Java中List列表去重有序和无序的6种方法的文章就介绍到这了,更多相关Java中List列表去重内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot集成JSR303参数校验的方法实现

    Springboot集成JSR303参数校验的方法实现

    这篇文章主要介绍了Springboot集成JSR303参数校验的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Java实现答答租车系统

    Java实现答答租车系统

    这篇文章主要为大家详细介绍了Java实现答答租车系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 轻松掌握Java代理模式

    轻松掌握Java代理模式

    这篇文章主要帮助大家轻松掌握Java代理模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • java 面向对象代码块及不同位置对属性赋值的执行顺序

    java 面向对象代码块及不同位置对属性赋值的执行顺序

    这篇文章主要介绍了java面向对象代码块及不同位置对属性赋值的执行顺序,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • SpringBoot 内置 CollectionUtil用法实战指南

    SpringBoot 内置 CollectionUtil用法实战指南

    文章介绍了SpringBoot中自带的CollectionUtil类,包括判空、转换、合并、匹配和兜底功能,并通过实战例子详细展示了这些功能的应用场景和优势,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • Spring Boot 约定大于配置之如何实现自定义配置

    Spring Boot 约定大于配置之如何实现自定义配置

    本文介绍了SpringBoot的“约定大于配置”理念以及如何实现自定义配置,通过实现接口和添加@Configuration注解,开发者可以灵活地扩展和定制SpringBoot的默认行为,感兴趣的朋友一起看看吧
    2025-03-03
  • 关于文件合并与修改md5值的问题

    关于文件合并与修改md5值的问题

    这篇文章主要介绍了关于文件合并与修改md5值的问题,使用本博客的方法,不仅仅可以修改md5值,还可以达到隐藏文件的目的,需要的朋友可以参考下
    2023-04-04
  • java对double数组排序示例分享

    java对double数组排序示例分享

    这篇文章主要介绍了java对double数组排序示例,代码简单,下面我们直接上代码,需要的朋友可以参考下
    2014-03-03
  • SpringBoot登录验证token拦截器的实现

    SpringBoot登录验证token拦截器的实现

    本文主要介绍了SpringBoot登录验证token拦截器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java中日期时间比较的多种方法及实用代码

    Java中日期时间比较的多种方法及实用代码

    本文介绍了Java中不同日期时间类的比较方法,包括java.util.Date、java.util.Calendar、java.time API和java.sql.Timestamp,提供了使用before、after和compareTo等方法进行日期比较的示例代码,展示了各自的特点和使用场景,需要的朋友可以参考下
    2024-09-09

最新评论