首页 > 编程语言 >Java高效找出两个大数据量List集合中的不同元素

Java高效找出两个大数据量List集合中的不同元素

时间:2022-11-25 17:32:32浏览次数:47  
标签:Java 元素 List System 数据量 集合 listA listB

本文将带你了解如何快速的找出两个相似度非常高的List集合里的不同元素。主要通过Java API、List集合双层遍历比较不同、借助Map集合查找三种方式,以及他们之间的执行效率情况,话不多说,开搞! 集合初始化方法:

    /**
     * 制造任意个元素的的List集合
     * @param size List集合的size
     * @return List<String>
     */
    private static List<String> dataList(int size) {
        List<String> dataList = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            dataList.add("" + i);
        }
        return dataList;
    }

测试数据为集合A: 1千, 1万, 10万,1百万, 1千万的数据量.

  • 集合B比集合A多初始化六条数据,集合A添加一条特有的数据。
  • 测试数据使用空字符串 + 自然数的方式。

JavaAPI过滤(不推荐)

1千数据量

        List<String> listA = dataList(1000);
        //集合A添加一个集合B没有的元素
        listA.add("onlyA10086");
        List<String> listB = dataList(1006);
        Long startTime = System.currentTimeMillis();
        // 复制集合A和集合B作为备份
        List<String> listABak = new ArrayList<>(listA);
        List<String> listBBak = new ArrayList<>(listB);
        // 集合B存在,集合A不存在的元素
        listB.removeAll(listA);
        // 集合A存在,集合B不存在的元素
        listA.removeAll(listBBak);
        Long endTime = System.currentTimeMillis();
        List<String> differentList = new ArrayList<>();
        differentList.addAll(listB);
        differentList.addAll(listA);
        System.out.println("集合A和集合B不同的元素:"+differentList);
        Long costTime = endTime-startTime;
        System.out.println("比对耗时:"+costTime+"毫秒。");

耗时:22毫秒 image.png

1万数据量

        List<String> listA = dataList(10000);
        //集合A添加一个集合B没有的元素
        listA.add("onlyA10086");
        List<String> listB = dataList(10006);
        Long startTime = System.currentTimeMillis();
        // 复制集合A和集合B作为备份
        List<String> listABak = new ArrayList<>(listA);
        List<String> listBBak = new ArrayList<>(listB);
        // 集合B存在,集合A不存在的元素
        listB.removeAll(listA);
        // 集合A存在,集合B不存在的元素
        listA.removeAll(listBBak);
        Long endTime = System.currentTimeMillis();
        List<String> differentList = new ArrayList<>();
        differentList.addAll(listB);
        differentList.addAll(listA);
        System.out.println("集合A和集合B不同的元素:"+differentList);
        Long costTime = endTime-startTime;
        System.out.println("比对耗时:"+costTime+"毫秒。");

耗时:613毫秒 image.png

10万数据量

        List<String> listA = dataList(100000);
        //集合A添加一个集合B没有的元素
        listA.add("onlyA10086");
        List<String> listB = dataList(100006);
        Long startTime = System.currentTimeMillis();
        // 复制集合A和集合B作为备份
        List<String> listABak = new ArrayList<>(listA);
        List<String> listBBak = new ArrayList<>(listB);
        // 集合B存在,集合A不存在的元素
        listB.removeAll(listA);
        // 集合A存在,集合B不存在的元素
        listA.removeAll(listBBak);
        Long endTime = System.currentTimeMillis();
        List<String> differentList = new ArrayList<>();
        differentList.addAll(listB);
        differentList.addAll(listA);
        System.out.println("集合A和集合B不同的元素:"+differentList);
        Long costTime = endTime-startTime;
        System.out.println("比对耗时:"+costTime+"毫秒。");

image.png 可以看出来十万数据量级别已经比较慢了,需要77秒

100万数据量

emmm估计挺慢,不继续验证了。

标签:Java,元素,List,System,数据量,集合,listA,listB
From: https://blog.51cto.com/zhanjq/5885531

相关文章

  • 列表list
    列表一共分三种一、有序列表使用ol标签来创建使用li表示列表项二、无序列表(用来做导航菜单)使用ul标签来创建使用li表示列表项三、定义列表使用dl标签来创建使用......
  • IDEA插件List of plugins was not loaded for following hosts: http://plugins.jetbr
    IDEA插件市场点开资源库后报错:Listofpluginswasnotloadedforfollowinghosts:http://plugins.jetbrains.com。解决办法:File-Settings-Plugins-Browserepositori......
  • ArrayList 与linkedlist区别
    ArrayList和Vector使用了数组的实现,可以认为ArrayList或者Vector封装了对内部数组的操作,比如向数组中添加,删除,插入新的元素或者数据的扩展和重定向。LinkedList使用了循环双......
  • datatable 转list
    C#DataTable转List方法,网上有好多,之前也收集了,感觉这个也不错,重要是自己要领会这里面的代码含义。接不来我就把代码贴出来分享一下,大家觉得如果不好,请留言我,我来改进。u......
  • java打印杨辉三角
    java打印杨辉三角方法一使用二维数组的方法:importjava.util.Scanner;publicclassYangHui1{publicstaticvoidmain(String[]args){/*杨辉三角如......
  • Redis 数据类型list、hash、zset 原理、使用场景说明
    面试中常会被问到Redis的数据类型用过哪些,被问的多了就想整理一下,以被下次再被问时可以很好的回复,现在对redis中list、hash、zset进行梳理。一、listRedislist的实现......
  • java ThreadLocal 内存泄露
    原文:https://zhuanlan.zhihu.com/p/56214714 前言ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之......
  • Starrocks提示be找不到JAVA_HOME
    解决方案:vim/etc/profile这里面添加java的环境变量source/etc/profile重启be进程......
  • 【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!
    ​​ 李华明Himi ​​​原创,转载务必在明显处注明​ ListView:在Android应用开发过程中属于最常用的系统组件之一,当然可能童鞋们问为什么会突然游戏开发中讲这个,呵呵,其......
  • Java中List同ArrayList有什么不同呢?
    转自:http://www.java265.com/JavaProblem/202110/1415.html下文笔者讲述使用java代码常见的List和ArrayList的不同之处,如下所示:不同之处:一、两者压根都不是一个......