list去除重复数据的五种方式(代码片段)

刚入门的程序猿小白 刚入门的程序猿小白     2022-12-05     607

关键词:

List在Java开发中用得非常多,数据处理方面,咱们经常需要对重复数据去重。

以下介绍五种-不同的方法去除 Java 中ArrayList中的重复数据

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

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

  • 删除重复数据
  • 保持添加到其中的数据的顺序

Java示例使用LinkedHashSet删除arraylist中的重复项。在给定的示例中,numbersList是包含整数的arraylist,其中一些是重复的数字。
例如1,3和5.我们将列表添加到LinkedHashSet,然后将内容返回到列表中。结果arraylist没有重复的整数。

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

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去除重复数据的五种方式(代码片段)

...们经常需要对重复数据去重。以下介绍五种-不同的方法去除Java中ArrayList中的重复数据1、使用LinkedHashSet删除arraylist中的重复数据LinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet在内部完成两件事:删除重复数... 查看详情

list去除重复数据的五种方式(代码片段)

...们经常需要对重复数据去重。以下介绍五种-不同的方法去除Java中ArrayList中的重复数据1、使用LinkedHashSet删除arraylist中的重复数据LinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet在内部完成两件事:删除重复数... 查看详情

list的五种去重方式(代码片段)

//set集合去重,不改变原有的顺序publicstaticvoidpastLeep1(List<String>list)System.out.println("list=["+list.toString()+"]");List<String>listNew=newArrayList<>();Setset=newHashSet();for(Stringstr: 查看详情

list去重的五种方式

参考技术ALinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet在内部完成两件事:Java示例使用LinkedHashSet删除arraylist中的重复项。在给定的示例中,numbersList是包含整数的arraylist,其中一些是重复的数字。例如1,3和5.我... 查看详情

redis值的五种数据类型练习(代码片段)

目录前言一、String数据类型set、get、append、strlenincr、decr、incrby、decrbygetset、setex、setnxmset、mget、msetnx二、List数据类型lpush、lpushx、lrangelpop、llen、dellrem、lset、lindex、ltrimlinsertrpush、rpushx、rpop、rpoplpush三、Hash数据 查看详情

读取属性配置文件的五种方式(代码片段)

读取属性配置文件的五种方式读取属性配置文件的五种方式读取属性配置的示例属性配置文件方式一:使用注解@Value读取属性配置方式二:使用注解@ConfigurationProperties读取属性配置方式三:使用注解@PropertySou... 查看详情

jdbc连接mysql的五种方式(代码片段)

测试环境说明mysql数据库:jdbc:mysql://localhost:3306/testIDE:IDEA2022JDK:JDK8mysql:mysql5.7JDBC:5.1.37第一种方式使用静态加载驱动方式,连接mysql这种方式灵活性差,依赖性强publicvoidconnection01( 查看详情

缓存加速------redis的五种数据类型(string,list,hash,set,sortedset)(代码片段)

目录一.String数据类型1.set,get2.append3.incr,decr,incrby,decrby4.strlen5.setex6.getset7.setnx8.mset,mget,msetnx二.List数据类型1.lpush,lpushx,lrange2.lpop&#x 查看详情

clickhouse数据库删除数据的五种方式(代码片段)

...的方式二、执行delete方式三、执行truncate方式四、设置表数据生命周期五、删除数据文件目录总结前言clickhouse数据库清理数据的方式很多,每种方式都各有自己的优缺点,请根据实际需要采用适合自己的方式,下面逐... 查看详情

圣杯布局的五种方式(代码片段)

方法一center还在文本流之中,会影响到后面的元素,不影响前面的元素<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content= 查看详情

nginxupstream的五种分配方式(代码片段)

Nginx负载均衡选项upstream用法举例1、轮询(weight=1)默认选项,当weight不指定时,各服务器weight相同,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。upstreambakendserver192.168.1.10;server192.168.1.11;&... 查看详情

物体运动的五种方式(很重要)(代码片段)

1**************************************2物体运动的几种方式:31.4this.transform.position+=Vector3.left*Time.deltaTime;5/*Vector3.left是Vector3的一个属性,表示的是3为坐标系中的向左的单位向量,6实质和newVector3(-1,0,0)是一个效果。还有right,up,down,f 查看详情

进程间的五种通信方式介绍(代码片段)

进程间通信(IPC)介绍 进程间通信(IPC,InterProcessCommunication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中Socket和Streams支持... 查看详情

进程间的五种通信方式介绍(代码片段)

进程间通信(IPC,InterProcessCommunication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中Socket和Streams支持不同主机上的两个进程IPC。... 查看详情

服务探活的五种方式(代码片段)

几个月前,我在《4个实验,彻底搞懂TCP连接的断开》这篇文章中给自己挖了个坑:文中提到的实际问题就是服务探活,今天来填上这个坑。在微服务架构下,服务提供方(Provider)的节点一般不止一个,消费方(Consumer)根据负... 查看详情

list集合去除重复数据(代码片段)

【转自】Java中List集合去除重复数据的方法1.循环list中的所有元素然后删除重复publicstaticListremoveDuplicate(Listlist)for(inti=0;i<list.size()-1;i++)for(intj=list.size()-1;j>i;j--)if(list.get(j).equals(list.get(i)))list.rem 查看详情

list集合遍历的五种方法(代码片段)

List集合遍历的五种方法:publicstaticvoidmain(String[]args)List<Integer>list=Lists.newArrayList();list.add(1);list.add(2);list.add(3);//方法一普通for循环遍历System.out.println("普通for循环遍历");for(inti=0;i<list.size();i++)System.out.pri... 查看详情

快速学会jdbc及获取连接的五种方式(代码片段)

...JDBC及获取连接的五种方式1.JDBC基本介绍JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,完成对数据库的各种操作。JDBC基本原理... 查看详情