以下介绍5种去除Java中ArrayList中的重复数据

1. 使用LinkedHashSet删除arrayList中的重复数据

LinkHashSet是在一个ArrarList删除重复数据的最佳方法.LinkHaseSet在内部完成两件事

  • 删除重复数据
  • 保持添加到其中的数据的顺序
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;public class Temp {public static void main(String[] args) {List<Integer> numbersList=new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8));System.out.println(numbersList);LinkedHashSet<Integer> hashSet=new LinkedHashSet<>(numbersList);System.out.println(hashSet);}
}

输出效果

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8]
[1, 2, 3, 4, 5, 6, 7, 8]

2.使用Java8新特性stream进行List去重

要从arrayList中删除重复项,我们也可以使用java 8 stream api ,使用stream中distinct()方法返回一个由不同数据组成的流,通过对象的equals() 方法进行比较
收集所有区域数据List使用Collectors.toList()
Java程序,用于在不是用Set的情况下重java中的arrayList中删除重复项

List<Integer> numbersList=new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8));System.out.println(numbersList);List<Integer> listWithoutDuplicates = numbersList.stream().distinct().collect(Collectors.toList());System.out.println(listWithoutDuplicates);

输出效果

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8]
[1, 2, 3, 4, 5, 6, 7, 8]

3.利用HashSet不能添加重复数据的特性,由于HaseSet不能保证添加的顺序,所以只能作为判读条件保证顺序

public static void removeDuplicate(List<Integer> list) {HashSet<Integer> set = new HashSet<>(list.size());List<Integer> result = new ArrayList<>(list.size());for (Integer item : list) {if (set.add(item)) {result.add(item);}}list.clear();list.addAll(result);}

输出效果

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8]
[1, 2, 3, 4, 5, 6, 7, 8]

4.利用List的contains方法循环遍历,重写排序,只添加一次数据,避免重复

 public static void removeDuplicate(List<Integer> list) {List<Integer> result = new ArrayList<>(list.size());for (Integer item : list) {if (!result.contains(item)) {result.add(item);}}list.clear();list.addAll(result);}

输出效果

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8]
[1, 2, 3, 4, 5, 6, 7, 8]

5.双重for循环去重

 for (int i = 0; i < numbersList.size(); i++) {for (int j = i + 1; j < numbersList.size(); j++) {if (numbersList.get(i) == numbersList.get(j)) {numbersList.remove(numbersList.get(i));}}}

输出结果

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8]
[1, 2, 3, 4, 5, 6, 7, 8]

6.使用TreeSet实现List去重(有序)

 public static List removeDuplicationByTreeSet(List<Integer> list) {TreeSet set = new TreeSet<>(list);// 把list集合所有元素清空list.clear();list.addAll(set);return list;}
[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8]
[1, 2, 3, 4, 5, 6, 7, 8]

7.使用HashSet实现List去重(无序)

 /**使用HashSet实现List去重(无序)** @param list* */public static List removeDuplicationByHashSet(List<Integer> list) {HashSet set = new HashSet(list);//把List集合所有元素清空list.clear();//把HashSet对象添加至List集合list.addAll(set);return list;}

性能比较

package com.sth;import java.util.*;
import java.util.stream.Collectors;public class Temp {public static void main(String[] args) {List<Integer> list1 = new ArrayList<>();List<Integer> list2 = new ArrayList<>();List<Integer> list3 = new ArrayList<>();List<Integer> list4 = new ArrayList<>();List<Integer> list5 = new ArrayList<>();Random random = new Random();for (int i = 0; i < 100000; i++) {int value = random.nextInt(500);list1.add(value);list2.add(value);list3.add(value);list4.add(value);list5.add(value);}long startTime;long endTime;startTime = System.currentTimeMillis();removeDuplicationByHashSet(list1);endTime = System.currentTimeMillis();System.out.println("使用HashSet实现List去重时间:" + (endTime - startTime) + "毫秒");startTime = System.currentTimeMillis();removeDuplicationByTreeSet(list2);endTime = System.currentTimeMillis();System.out.println("使用TreeSet实现List去重时间:" + (endTime - startTime) + "毫秒");startTime = System.currentTimeMillis();removeDuplicationByStream(list3);endTime = System.currentTimeMillis();System.out.println("使用java8新特性stream实现List去重:" + (endTime - startTime) + "毫秒");startTime = System.currentTimeMillis();removeDuplicationBy2For(list4);endTime = System.currentTimeMillis();System.out.println("使用两个for循环实现List去重:" + (endTime - startTime) + "毫秒");startTime = System.currentTimeMillis();removeDuplicationByContains(list5);endTime = System.currentTimeMillis();System.out.println("使用List集合contains方法循环遍历:" + (endTime - startTime) + "毫秒");}public static List removeDuplicationByTreeSet(List<Integer> list) {TreeSet set = new TreeSet<>(list);// 把list集合所有元素清空list.clear();list.addAll(set);return list;}/*** 使用HashSet实现List去重(无序)** @param list*/public static List removeDuplicationByHashSet(List<Integer> list) {HashSet set = new HashSet(list);//把List集合所有元素清空list.clear();//把HashSet对象添加至List集合list.addAll(set);return list;}/*** 使用java8新特性stream实现List去重(有序)** @param list*/public static List removeDuplicationByStream(List<Integer> list) {List newList = list.stream().distinct().collect(Collectors.toList());return newList;}/*** 使用两个for循环实现List去重(有序)** @param list*/public static List removeDuplicationBy2For(List<Integer> list) {for (int i = 0; i < list.size(); i++) {for (int j = i + 1; j < list.size(); j++) {if (list.get(i).equals(list.get(j))) {list.remove(j);}}}return list;}/*** 使用List集合contains方法循环遍历(有序)** @param list*/public static List removeDuplicationByContains(List<Integer> list) {List<Integer> newList = new ArrayList<>();for (int i = 0; i < list.size(); i++) {boolean isContains = newList.contains(list.get(i));if (!isContains) {newList.add(list.get(i));}}list.clear();list.addAll(newList);return list;}
}

输出

随机数字100内
使用HashSet实现List去重时间:1毫秒
使用TreeSet实现List去重时间:1毫秒
使用java8新特性stream实现List去重:74毫秒
使用两个for循环实现List去重:2毫秒
使用List集合contains方法循环遍历:0毫秒
随机数字1000内
使用HashSet实现List去重时间:3毫秒
使用TreeSet实现List去重时间:3毫秒
使用java8新特性stream实现List去重:76毫秒
使用两个for循环实现List去重:18毫秒
使用List集合contains方法循环遍历:4毫秒
随机数字10000内
使用HashSet实现List去重时间:6毫秒
使用TreeSet实现List去重时间:8毫秒
使用java8新特性stream实现List去重:77毫秒
使用两个for循环实现List去重:38毫秒
使用List集合contains方法循环遍历:14毫秒
随机数字100000内
使用HashSet实现List去重时间:22毫秒
使用TreeSet实现List去重时间:28毫秒
使用java8新特性stream实现List去重:86毫秒
使用两个for循环实现List去重:711毫秒
使用List集合contains方法循环遍历:51毫秒

List去除重复数据的几种方式和性能比较相关推荐

  1. List 去除重复数据的五种方式,舒服~

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 多纤果冻 来源 | https://blog. ...

  2. java List去除重复数据的五种方式

    以下介绍五种-不同的方法去除Java中ArrayList中的重复数据 1.使用LinkedHashSet删除arraylist中的重复数据 **LinkedHashSet**是在一个ArrayList ...

  3. List去除重复数据的五种方式

    作者:多纤果冻 blog.csdn.net/qq_37939251/article/details/90713643 以下介绍五种-不同的方法去除 Java 中ArrayList中的重复数据 1.使用 ...

  4. list过滤重复数据java_java中List去除重复数据的五种方式

    在使用java编码中,我们会经常遇到让List对象去重,最常见的是ArrayList去除重复的数据, 看似很简单的东西,其实里面是有很多学问的,下面介绍不同的方法去除java中ArrayList中的重 ...

  5. Java 去除重复数据的五种方式

    1.使用LinkedHashSet删除arraylist中的重复数据 LinkedHashSet是在一个ArrayList删除重复数据的最佳方法.LinkedHashSet在内部完成两件事: 删除重复 ...

  6. SQL中去除重复数据的几种方法,我一次性都告诉你​

    使用SQL对数据进行提取和分析时,我们经常会遇到数据重复的场景,需要我们对数据进行去重后分析. 以某电商公司的销售报表为例,常见的去重方法我们用到distinct 或者group by 语句, 今天介 ...

  7. list循环添加数据_List 去除重复数据的 5 种正确姿势!你知道几种?

    喜欢就关注我们吧! 以下介绍五种不同的方法去除 Java 中ArrayList中的重复数据. 1.使用LinkedHashSet删除arraylist中的重复数据 LinkedHashSet是在一个A ...

  8. java list过滤重复的数据_List 去除重复数据的 5 种正确姿势!

    以下介绍五种-不同的方法去除 Java 中ArrayList中的重复数据 1.使用LinkedHashSet删除arraylist中的重复数据 LinkedHashSet是在一个ArrayList删除 ...

  9. 数据库删除重复数据的两种方式

    1.创建临时表 mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl GROUP BY (last_ ...

最新文章

  1. 有关增强现实技术的过去、现在和未来的发展
  2. 加州无人车报告出炉,苹果表现垫底,国产车进前五
  3. 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc
  4. Java黑皮书课后题第10章:*10.6(显示素数)编写一个程序,然后按降序显示小于120的所有素数。使用StackOfIntegers类存储这些素数,获取之后按逆序显示它们
  5. 自然数幂和取模问题进一步探究
  6. XenApp共享桌面打开文件警告与桌面文件由于Internet文件安全设置无法打开解决办法...
  7. mysql outfile 变量_转mysql dumpfile 与 outfile 函数的区别
  8. 【渝粤题库】广东开放大学社会学概论形成性考核
  9. Spring框架IOC和AOP的实现原理(概念)
  10. 先装vs还是先装sql_止回阀该装在出口阀前还是阀后?
  11. Uniapp实现实时音视频的基础美颜滤镜功能
  12. java 在某个时间段定时_Java 在某一个时间点定时执行任务(转载)
  13. Django实现微信小程序九宫格切图后端(第九周学习记录)
  14. PC比电脑好玩的秘密是什么?答案就是因为有这些神奇的网站!
  15. yum mysql的安装目录在哪_linux下yum安装 mysql 及详细配置及修改mysql默认目录
  16. dinic 最大流费用流模板
  17. 教你如何将正点原子stm32f103rc型号的板子程序改成stm32f03C8T6最小系统板
  18. EXCEL中更改单元格格式后不刷新问题的解决方法
  19. 九月腾讯,创新工场,淘宝等公司最新面试三十题(第171-200题)
  20. 人工智能在模拟空战中击落人类飞行员

热门文章

  1. PPT居然还可以一键换色!学会这4招再也不怕色了……
  2. Causality Inspired Representation Learning for Domain Generalization 阅读笔记
  3. 干货 | PCB设计中焊盘的种类和设计标准
  4. springCloud-Eureka自我保护模式
  5. 直播实录|百度大脑EasyDL·NVIDIA专场 部署专家
  6. WPF开发经验-实现Win10虚拟触摸键盘
  7. 电赛专题 | G题-双路语音同传
  8. IO多路复用select,poll epoll以及区别
  9. 奇门遁甲排盘方:定局
  10. 滴滴共享单车在深圳被叫停;六六接受京东道歉;宝马发布最新充电网络计划丨价值早报