高效率 使用java实现对象关联(类sql语句:left join)

我遇到需求是要将两个不在同一个数据库的表进行关联,将主键相同的两条数据合并成一条。
平时工作中也会偶尔遇到这种类似的需求,这里做了优化,简单做个记录

直接上代码
思路:使用双重for循环来实现功能。让双重for循环里的第一条 就准确命中数据,从而达到提升效率的目的

//生成两组测试数据(这里故意打乱顺序)
        List<Map<String, String>> list1 = new ArrayList<>();
        List<Map<String, String>> list2 = new ArrayList<>();
        for (int i = 0; i <= 50000; i++) {
            Map<String, String> map = new HashMap<>(); map.put("value", i + "w"); list1.add(map);
        }
        for (int i = 50000; i >= 0; i--) {
            Map<String, String> map = new HashMap<>(); map.put("value", i + "w"); list2.add(map);
        }
        long start = System.currentTimeMillis();//记录开始时间
        //1、两组数据使用相同的排序方式
        Collections.sort(list1, new Comparator<Map<String, String>>() {
            @Override
            public int compare(Map<String, String> o1, Map<String, String> o2) {
                return o1.get("value").compareTo(o2.get("value"));
            }
        });
        Collections.sort(list2, new Comparator<Map<String, String>>() {
            @Override
            public int compare(Map<String, String> o1, Map<String, String> o2) {
                return o1.get("value").compareTo(o2.get("value"));
            }
        });
        for (Map<String, String> m1 : list1) {
            for (Map<String, String> m2 : list2) {
                if (m1.get("value").equals(m2.get("value"))) {
                    list2.remove(m2);//2、副数组 使用过后去除元素
                    break;//3、确定元素后 跳过其余元素
                }
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("耗时:"+(end - start) + "ms");
  • 普通书写,不加任何优化,可以看到耗时将近40秒
  • 获取两张表的数据 java java实现两张表关联_数据

  • 优化后,不到1秒时间执行完成
  • 获取两张表的数据 java java实现两张表关联_java_02