当前位置 博文首页 > ddd295569371的博客:Java取两个数组中相同的数据

    ddd295569371的博客:Java取两个数组中相同的数据

    作者:[db:作者] 时间:2021-06-15 18:13

    网上看了不少文章,有大部分是利用for循环,但是for循环如果数据少还好,但是数据量特别大的时候效率就不行了,下面我就直接贴使用steam解决该问题

    首先创建数组,以及打印出for循环的所用耗时

    		java.lang.String[] a = new String[100000];
            java.lang.String[] b = new String[100000];
            for(int i = 0; i < 100000; i++){
                int c = (int) (Math.random() * 100000);
                int abs = Math.abs(c);
                a[i] = String.valueOf(abs);
            }
            for(int i = 0; i < 100000; i++){
                int c = (int) (Math.random() * 100000);
                int abs = Math.abs(c);
                b[i] = String.valueOf(abs);
            }
    
            //for & for
            ArrayList<String> forList = new ArrayList<>();
            long start = System.currentTimeMillis();
            for(int i = 0 ; i < a.length ; i++ ){
                for(int j = 0 ; j < b.length ; j++){
                    if(a[i].equals(b[j])){
                        forList.add(a[i]);
                    }
                }
            }
            long end = System.currentTimeMillis();
            System.out.println("耗时 : " + (end - start));
            System.out.println(forList);
    
    

    得出结果:
    在这里插入图片描述

    • 使用stream
    		HashSet<String> set = new HashSet<>(Arrays.asList(a));
            HashSet<String> strings = new HashSet<>(Arrays.asList(b));
    		long l2 = System.currentTimeMillis();
            List<String> collect = set.stream().filter(strings::contains).collect(Collectors.toList());
            long l3 = System.currentTimeMillis();
            System.out.println("set & stream 耗时:" + (l3 - l2) + ", collect长度:" + collect.size());
            System.out.println(collect);
    
    
    

    得出结果:
    在这里插入图片描述


    由上数据得出for循环所用时长对比stream要多很多,建议使用steam方法进行取交集