首页 > 编程语言 >Java集合去重的几种方法

Java集合去重的几种方法

时间:2023-06-14 15:06:30浏览次数:45  
标签:Java list List System 几种 println 集合 out

一、List的contains方法去重

示例代码如下:

import java.util.ArrayList;
import java.util.List;
 
/**
 * @author qinxun
 * @date 2023-06-13
 * @Descripion: List集合去重
 */
public class RepeatDemo {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        // 准备一个有2w数据的集合,其中有一半是存在重复的数据
        List<String> list = new ArrayList<>();
        for (int i = 1; i <= 10000; i++) {
            list.add(String.valueOf(i));
        }
        for (int i = 10000; i >= 1; i--) {
            list.add(String.valueOf(i));
        }
        System.out.println(list);
        System.out.println(collectionDistinct(list));
        long end = System.currentTimeMillis();
        // 输出 耗时:187毫秒
        System.out.println("耗时:" + (end - start) + "毫秒");
    }
 
    /**
     * List去重
     *
     * @param list List集合
     * @return 去重后返回到集合数据
     */
    private static List<String> collectionDistinct(List<String> list) {
        List<String> result = new ArrayList<>();
        for (String data : list) {
            // list的contains方法去重
            if (!result.contains(data)) {
                result.add(data);
            }
        }
        return result;
    }
}

程序执行结果:

耗时:187毫秒

二、使用HashSet机制去重

示例代码如下:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
 
/**
 * @author qinxun
 * @date 2023-06-13
 * @Descripion: List集合去重
 */
public class RepeatDemo {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        // 准备一个有2w数据的集合,其中有一半是存在重复的数据
        List<String> list = new ArrayList<>();
        for (int i = 1; i <= 10000; i++) {
            list.add(String.valueOf(i));
        }
        for (int i = 10000; i >= 1; i--) {
            list.add(String.valueOf(i));
        }
        System.out.println(list);
        System.out.println(collectionDistinct(list));
        long end = System.currentTimeMillis();
        // 输出 耗时:15毫秒
        System.out.println("耗时:" + (end - start) + "毫秒");
    }
 
    /**
     * List去重
     *
     * @param list List集合
     * @return 去重后返回到集合数据
     */
    private static List<String> collectionDistinct(List<String> list) {
        return new ArrayList<>(new HashSet<>(list));
    }
}

程序执行结果:

耗时:15毫秒

三、使用Stream流的distinct方法去重

示例代码如下:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * @author qinxun
 * @date 2023-06-13
 * @Descripion: List集合去重
 */
public class RepeatDemo {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        // 准备一个有2w数据的集合,其中有一半是存在重复的数据
        List<String> list = new ArrayList<>();
        for (int i = 1; i <= 10000; i++) {
            list.add(String.valueOf(i));
        }
        for (int i = 10000; i >= 1; i--) {
            list.add(String.valueOf(i));
        }
        System.out.println(list);
        System.out.println(collectionDistinct(list));
        long end = System.currentTimeMillis();
        // 输出 耗时:15毫秒
        System.out.println("耗时:" + (end - start) + "毫秒");
    }
 
    /**
     * List去重
     *
     * @param list List集合
     * @return 去重后返回到集合数据
     */
    private static List<String> collectionDistinct(List<String> list) {
        return list.stream().distinct().collect(Collectors.toList());
    }
}

程序执行结果:

耗时:51毫秒

四、总结

我们推荐使用HashSet机制和Stream流的distinct方法实现去重。

标签:Java,list,List,System,几种,println,集合,out
From: https://blog.51cto.com/u_13312531/6477010

相关文章

  • java面试算法:设计搜索输入框的输入提示功能
    我们使用搜索引擎时,需要在搜索框输入关键字,当你在框中输入头几个字符时,搜索框会出现一个下拉框,里面包含着以当前输入字符为前缀的字符串,如果里面包含你想要输入的内容,那么你就可以直接选取,而不必要把关键字的所有字符依次输入,这种功能极大的提高了搜索体验。本次算法题的题目是,你如......
  • JavaScript 动态编辑元素某属性值(例如:元素div的class属性)
    元素<divclass="h5-box-search-itemusimglistnodisplay"id="usimglist"></div>(满足条件)动态更新div元素的class属性值://获取目标容器letusimglist=document.getElementById('usimglist');//获取其class的属性值letclassinfo=usimglist.ge......
  • Java8-Consumer的使用场景
    Java8的Consumer比较抽象。结合几个例子来看看常用的使用场景有以下几个:把方法作为函数的入参Java8中可以使用Consumer来实现在函数的入参中传递方法,这个如果熟悉js的话可能会比较好理解一些。在某些情况下,不能直接使用某个对象的方法,需要把方法传递到另一个函数里面去执行,那么......
  • Java8-Predicate 策略模式的替代品消灭 if else
    使用策略模式消灭ifelse,可以利用Java8的新特性来实现策略模式。利用Java8的Predicate消灭ifelse。首先定义一个map,key是不同的服务代码,value是需要做校验的条件,然后针对不同的服务代码做校验。当然Supplier、Consumer都可以做类似的实现。//定义校验的策略映射关系staticM......
  • Java8-并行流的使用
    Java8中的并行流使用publicclassStreamTest{publicList<Person>constructPersons(){List<Person>persons=newArrayList<Person>();for(inti=0;i<5;i++){Personp=newPerson(i,"name"+......
  • JavaScript中数组(Array)与对象(Object)中的检索方式
    这里只是要说明一点,数组(Array)和对象(Object)都可以用[...]的方式来进行检索[...]中包含的需要是一个表达式,这个表达式的值最终会以字符串的形式被使用因为不论是数组(Array)还是对象(Object),他们都是以键值对的形式存储内容的,而所有的键的数据类型都是字符串(Array好像不是,但是先这样......
  • mysql数据库数据同步几种通用方法?
    MySQL数据库数据同步的几种通用方法包括以下几个方面:一、基于主从同步主从同步是MySQL数据库最为常见和基本的同步方式,即其中一台MySQL服务器作为主服务器(Master),另外一台或多台MySQL服务器作为从服务器(Slave)。主服务器处理写入数据的请求,并将数据的变化复制到从服务器,以......
  • 编译原理动手实操,用java实现编译器-算术表达式及其语法解析器的实现
     本节代码下载地址:http://pan.baidu.com/s/1sjWiwPn代码的理解和运行是吃透编译原理的关键,如果我们看的是爱情动作片,自然选择无码的好,但如果看得是计算机课程,则必须有码,无码的计算机理论都是耍流氓。当前,java所实现的简易编译器目的是将一条或一组含有加号和乘号的算术表达式编译......
  • java构建TCP/IP协议:DNS,域名解析协议的基本原理介绍
    从本节开始,我们研究和实现一个体系较为复杂的协议,也就是域名解析协议,简写为DNS。该协议几乎也是我们”日用而不知“的幕后英雄,没有它肯定就没有现在的互联网繁荣。当我们在浏览器上输入网址,例如www.baidu.com时,浏览器先通过DNS协议找到与该网址对应的IP地址,然后再使用IP去向服务器......
  • java构建TCP/IP协议:DNS,域名解析协议系统的运行流程
    DNS协议的运转需要客户端和服务器进行交互。由于服务器端需要存储大量的域名信息,同时每天需要应答海量的解析请求,因此它的设计必须遵循分布式系统。客户端向一台服务器请求解析服务时,对方可能没有相应的域名信息,于是它会向上一层查询,获得拥有给定域名信息的服务器,然后把对应服务器......