1,使用 LinkedHashSet 删除 arraylist 中的重复数据

LinkedHashSet 是在一个 ArrayList 删除重复数据的最佳方法,LinkedHashSet 在内部完成两件事

(1).删除重复数据

(2) 保持添加到其中的数据的顺序

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;public class ArrayListExample
{public static void main(String[] args){ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));System.out.println(numbersList);LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(numbersList);ArrayList<Integer> listWithoutDuplicates = new ArrayList<>(hashSet);System.out.println(listWithoutDuplicates);}}

输出结果:

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

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

2,使用 java8 新特性 stream 进行 List 去重

要从 arraylist 中删除重复项,我们也可以使用 java8 stream api,使用 steam 的 distinct() 方法返回一个由不同数据组成的流,通过对象的 equals() 方法进行比较。

收集所有区域数据 List 使用 Collectors.toList()。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class ArrayListExample
{public static void main(String[] args){ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));System.out.println(numbersList);List<Integer> listWithoutDuplicates = numbersList.stream().distinct().collect(Collectors.toList());System.out.println(listWithoutDuplicates);}}

输出结果:

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

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

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

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

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

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

5,双重for循环去重

for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.size(); j++) { if(i!=j&&list.get(i)==list.get(j)) { list.remove(list.get(j)); } }  }  

List数组去重的几种方法相关推荐

  1. java hashmap 去重_java数组去重的两种方法

    我们对于数组元素的使用,有时候在创建数组的初期,并没有考虑过元素的重复问题.当我们想要不重复元素的数组时,就要再进行一步去重的工作.数组的去重有两种方法可以实现,一个是循环比较,另一个是hashSet ...

  2. 两个对象数组去重的3种方法

    两个对象数组去重的3种方法 前言 问题描述 解决方案一 解决方案二 解决方案三 前言 前段时间写过JavaScript数组去重最简单的 4 种方案,里面的数组元素是基本类型.本文要讲的数组元素是对象, ...

  3. 数组去重的12种方法总结

    数组去重的11种方法 (1)ES5常用:利用for嵌套for,然后splice去重 function unique(arr) {for (var i = 0; i < arr.length; i ...

  4. java数组去重方法是,java数组去重的两种方法

    我们对于数组元素的使用,有时候在创建数组的初期,并没有考虑过元素的重复问题.当我们想要不重复元素的数组时,就要再进行一步去重的工作.数组的去重有两种方法可以实现,一个是循环比较,另一个是hashSet ...

  5. JavaScript数组去重的五种方法

    JavaScript数组去重的五种方法 先简单准备一个数组,用于方法的实验: let array = [1,1,2,3,4,4,1,5,6,6,7,7,7]; console.log(`去重前的数组: ...

  6. 数组去重--这几种方法够不?

    数组去重,是校招面试的必考知识点.简单的说,数组去重就是将一个数组中的相同的元素删除,只保留其中的一个.这里的相同其实是一个陷阱,有好多同学只认为值相等即为相同,而忽略类类型的判断.所以大家在进行数组 ...

  7. Js中数组去重的几种方法

    前几天在看前端面试题的时候,其中js部分有个问题是实现数组去重的算法,一开始就想了一两种方法,后来仔细回忆了下这个题,觉得该问题实现方法确实不止局限于一两种方法 ,从不同的角度去看待该问题就会有多种实 ...

  8. JS----JavaScript数组去重(12种方法,史上最全)

    数组去重的方法 一.利用ES6 Set去重(ES6中最常用) Set 不包含重复元素的值的集合 Map 双列集合 键值对 与object的区别 : object中的key只能是string类型 而Ma ...

  9. 原生JS数组去重的几种方法

    有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢? 这能怎么办,自己手动实现嘛.(以下代码直接在原型上添加的的方法,为的就是和原 ...

  10. 2019.08.30数组去重的几种方法以及所需时间对比

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

最新文章

  1. uiautomator 代码记录 :BT接收测试
  2. python写入文件-Python写入文件(write和writelines)详解
  3. java基础系列:集合基础(2)
  4. 这个一夜暴富的秘诀你还不知道?
  5. C语音的预处理,编译,汇编,链接过程分析
  6. 在Angular单个的单元测试里,调用多次detectChange,会重复执行ngAfterViewInit hook吗
  7. [AGC026D]Histogram Coloring
  8. SpringMVC图片上传与显示
  9. 在linux中建立一个vim的目录,Linux学习笔记一(目录结构、Vim编辑器、用户管理)...
  10. 东半球最全的 postman 使用教程
  11. MongoDB-与SpringBoot集成
  12. SpringMVC-高级参数绑定
  13. 数据挖掘十大算法-决策树的实现
  14. 微信小程序跳过第三方的_微信小程序工具 第三方平台
  15. NYOJ 822 画图
  16. C++虚函数及虚函数表(内存分配)简析
  17. 青鸟BCNT-网络信息安全工程师
  18. 经纬财富:沧州散户炒白银必读
  19. C++设计模式 | Singleton单例模式
  20. 点线面的意义_【干货】设计中的点线面到底有什么用?

热门文章

  1. OpenCL编程(1)- 开发环境搭建(NVIDIA GPU+Win10篇)
  2. 2021关于性能测试需要注意的6大要点(来看看自己还有那些没注意到)
  3. html5+mrow标签,HTML5 MathML
  4. 进制转换,16进制与float互转
  5. 《理解矩阵》——转载自孟岩老师
  6. 无花果量子计算机进展,无花果累低调做人,科学敬业奉献今生
  7. 2021胡润百富榜出炉:数据告诉你钟睒睒如何成为中国首富
  8. ORACLE 数据文件创建,查询,删除,恢复 相关SQL 整理
  9. Spring错误Caused by: java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$Reflec
  10. stdlib.h和stdio.h的区别