Java的List去重

1.contains()去重

ArrayList 的 contains() 方法的时间复杂度是O(n)O(n)O(n)的。

使用contains 进行判断去重的 时间复杂度是O(n2)O(n^2)O(n2)

保证去重后相对顺序不变。

public class ListDistinctExample {public static void main(String[] args) {List<Integer> list = new ArrayList<Integer>() {{add(1);add(3);add(5);add(2);add(1);add(3);add(7);add(2);}};System.out.println("原集合:" + list);method(list);}/*** 自定义去重* @param list*/public static void method(List<Integer> list) {// 新集合List<Integer> newList = new ArrayList<>(list.size());list.forEach(i -> {if (!newList.contains(i)) { // 如果新集合中不存在则插入newList.add(i);}});System.out.println("去重集合:" + newList);}
}

2.迭代器去重

自定义 List 去重,除了上面的新建集合之外,我们也可以使用迭代器循环判断每一项数据,如果当前循环的数据,在集合中存在两份或两份以上,就将当前的元素删除掉,这样循环完之后,也可以得到一个没有重复数据的集合,实现代码如下:

public class ListDistinctExample {public static void main(String[] args) {List<Integer> list = new ArrayList<Integer>() {{add(1);add(3);add(5);add(2);add(1);add(3);add(7);add(2);}};System.out.println("原集合:" + list);method_1(list);}/*** 使用迭代器去重* @param list*/public static void method_1(List<Integer> list) {Iterator<Integer> iterator = list.iterator();while (iterator.hasNext()) {// 获取循环的值Integer item = iterator.next();// 如果存在两个相同的值if (list.indexOf(item) != list.lastIndexOf(item)) {// 移除最后那个相同的值iterator.remove();}}System.out.println("去重集合:" + list);}
}

使用迭代器去重,不需要开辟新的空间,不保证相对顺序不变。

方法3:HashSet去重(无序)

HashSet 会自动排序。

    public static void method_2(List<Integer> list) {HashSet<Integer> set = new HashSet<>(list);System.out.println("去重集合:" + set);}

方法4:LinkedHashSet去重(有序)

既然 HashSet 会自动排序不能满足需求,那就使用 LinkedHashSet,它既能去重又能保证集合的顺序,实现代码如下:

     */public static void method_3(List<Integer> list) {LinkedHashSet<Integer> set = new LinkedHashSet<>(list);System.out.println("去重集合:" + set);}

方法5:TreeSet去重(无序)

TreeSet也会自动去重

除了以上的 Set 集合之外,我们还可以使用 TreeSet 集合来实现去重功能,实现代码如下:

    public static void method_4(List<Integer> list) {TreeSet<Integer> set = new TreeSet<>(list);System.out.println("去重集合:" + set);}

方法6:Stream去重(有序)

Stream 实现去重功能和其他方法不同的是,它不用新创建集合,使用自身接收一个去重的结果就可以了,并且实现代码也很简洁,并且去重后的集合顺序也和原集合的顺序保持一致,是我们最优先考虑的去重方法。

    public static void method_5(List<Integer> list) {list = list.stream().distinct().collect(Collectors.toList());System.out.println("去重集合:" + list);}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BPScvHNZ-1640780666386)(C:\Users\HeHao\AppData\Roaming\Typora\typora-user-images\image-20211229195711770.png)]

Java的List去重相关推荐

  1. Java ArrayList 实现去重

    对一份文件中的姓名去重后以列表形式输出: 文件内容: 代码实现: package Array_list_study; import java.util.*; import java.io.*; // ...

  2. java set 对象去重_JAVA对象去重

    JAVA对象去重比较恶心的说 需求:我要做的是去重每个权限的菜单,菜单表结构是 ID RoleID MenuID  获取的菜单表 应该是MenuID不能重复的 所以写菜单表的实体类,重写equals ...

  3. java list 合并去重_java 怎么把多个list 合并成一个去掉重复的

    展开全部 示例代码636f707962616964757a686964616f31333361313838: public static void main(String[] args){ List  ...

  4. java list 字段去重_java list 根据对象一个字段去重

    1.主要思路就是根据从写equals 以及 hashCode 方法. 代码如下: package com.bfd.unibase.modules.dataview.entity; import org ...

  5. 用Java简便地去重+排序(洛谷P1059题题解,Java语言描述)

    前言 Java终于不恶心我了,天哪,TreeSet万岁(坏了,暴露主题了,我的天哪~~) 题目要求 P1059题目链接 分析 当然,我们可以编写排序算法和去重算法,balabala,但我们用的是Jav ...

  6. java双重循环去重_java List去除重复数据实现

    作者:多纤果冻 blog.csdn.net/qq_37939251/article/details/90713643 注:参照的文章完成的是int类型去重. String 类型基本一致,我完成的dem ...

  7. java list 元素去重_小猿圈Java开发之list按照元素某个字段去重详解

    小猿圈Java老师给大家分享一篇关于如何实现Java8中list按照元素的某个字段去重的详细介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们一起来看一下吧. ...

  8. Java Set集合去重机制

    关于java里面的集合,大家经常利用到Set集合没有重复数据的特性,来进行数据的去重,那么去重的原理是怎么样的呢? 最近面试了几个人,其间有聊到集合的东西,所以就顺便问了一下这个问题,但是都是只知道这 ...

  9. Java List Stream 去重

    业务场景 在开发中我们常常需要过滤List中的重复对象,而重复的定义往往是根据单个条件或者多个条件,如果是单个条件的话还是比较好处理的,即使不使用工具,代码也可以很容易实现,但如果判断依据不是单个条件 ...

最新文章

  1. 障碍期权定价 python_[宜配屋]听图阁
  2. linux 编译C语言代码后产生OBJ文件的方法
  3. [转]在WPF中自定义控件 UserControl
  4. vue2.0中的$router 和 $route的区别
  5. 使用PM2搭建在线vue.js开发环境(以守护进程方式热启动)
  6. P4716-[模板]最小树形图
  7. 如何push一个docker镜像到DockerHub上
  8. 【开源社区】如何参与JEECG开源团队?
  9. 微型计算机二进制,微型计算机原理二进制十进制十六进制.docx
  10. 趣味java_java-趣味算法
  11. JS事件 鼠标移开事件(onmouseout)鼠标移开事件,当鼠标移开当前对象时,执行onmouseout调用的程序。...
  12. 「镁客·请讲」ETC社区发起人邹来辉(Roy):我为什么要做ETC社区和狗狗币基金会?...
  13. 如何获得微信小游戏跳一跳源码以及源代码组合包括哪些
  14. 计算机网络自顶向下方法 第四章 作业习题答案
  15. php计算时间差js,JS计算日期时间差
  16. 怎么批量调整图片大小
  17. matlab拓扑优化算法,拓扑优化算法及其实现.ppt
  18. 计算机科学与专业大学排名,计算机科学与技术专业大学排名
  19. 一步一步教你开发微信扫码联合登录
  20. iOS 打开AppStore指定app下载页

热门文章

  1. 蓝桥杯练习系统[C++]
  2. Matlab数学形态学运算
  3. 矩阵中的特征值和奇异值,物理意义
  4. 对外经济贸易的影响因素分析可以从哪几个角度入手?
  5. 【oP07CP运放电路简记】
  6. airpods pro无法使用Windows电脑充电的解决方法
  7. 打开天正显示服务器连接不可用,打开天正提示找不到可用cad版本 - 卡饭网
  8. 阿里云态势感知以及安骑士分析
  9. 需求管理软件(TC Requirement)介绍
  10. Echarts绘制差异代谢产物分类与KEGG通路分类的旭日图