双重for循环优化

来源:互联网 发布:手机杀进程软件 编辑:程序博客网 时间:2024/05/01 09:51
    假设两个链表List<Obj> oldList, List<Obj> newList。

    Obj的结构为:

class Obj {    String code;    String value;}

    实现如果 newObj.code = oldObj.code,则 newObj.value = oldObj.code

    穷举法:

    public void selectOld2New1(List<Obj> oldList, List<Obj> newList) {        int i = oldList.size() - 1;        int j = newList.size() - 1;        for (; i >= 0; i--) {            for (; j >=0; j--) {                Obj oldO = oldList.get(i);                Obj newO = newList.get(j);                if (oldO.code.equals(newO.code)) {                    newO.value = oldO.value;                    break;                }            }        }    }


    hash优化:

    public void selectOld2New2(List<Obj> oldList, List<Obj> newList) {        int i = oldList.size() - 1;        int j = newList.size() - 1;        HashMap<String, Obj> map = new HashMap<String, Obj>();        for (i = oldList.size() - 1; i >= 0; i--) {            Obj oldO = oldList.get(i);            map.put(oldO.code, oldO);        }                for (j = newList.size() - 1;j >=0; j--) {            Obj newO = newList.get(j);            String code = newO.code;            if (map.containsKey(code)) {                newO.value = ((Obj)map.get(code)).value;            }        }    }

     M为oldList的长度,N为newList的长度,穷举法的时间复杂度为N*M,hash法的时间复杂度为N+M。