加速使用2个大型arraylists的嵌套循环

时间:2017-03-17 17:11:54

标签: java for-loop arraylist

有2个对象的arraylists,其中第二个有一个相关的字段,我想填充第一个。

public ArrayList<object1> updateAccountWithGSAM(ArrayList<object1> o1, ArrayList<object2> o2) {
    ArrayList<object1> accs = new ArrayList<object1>();

    for (object1 acc : o1) {
        ArrayList<String> o2s= new ArrayList<String>();
        for (object2 g : o2) {
            if (g.getfield() != null) {
                if (acc.getId().equals(g.getobject1())) {
                    o2s.add(g.getCode());
                }
            }

        }
        acc.setGSAM_code(o2s);
        accs.add(acc);
    }


    return accs;

}

一般情况下,当数据很小时,这种方法很好,但是当数据集变大时会遇到问题(obj1和2在prod中每个大小约为500,000)。

不确定我可以采取哪些优化措施来加快速度,或者是否有替代嵌套for循环以实现我想要实现的目标?

1 个答案:

答案 0 :(得分:1)

我没有编译代码,但是这样的东西应该可以工作:

public ArrayList<object1> updateAccountWithGSAM(ArrayList<object1> o1, ArrayList<object2> o2) {
   HashMap<String, ArrayList<String>> reverseMap = new HashMap<String, ArrayList<String>>()
    for (object2 g : o2) {
        if (g.getfield() != null) {
            ArrayList<String> accs1 = reverseMap.get(g.getobject1());
            if(accs1 == null) {
                accs1 = new ArrayList<String>()
                reverseMap.put(g.getobject1(), acc1)
            }
            accs1.add(o2s);
        }
    }
    ArrayList<object1> accs = new ArrayList<object1>();
    for (object1 acc : o1) {
        ArrayList<String> o2s= new ArrayList<String>();
        if(reverseMap.get(acc.getCode()) != null) {
            acc.setGSAM_code(o2s);
            accs.add(acc);
        }
    }

    return accs;
}