假设两个链表List<Obj> oldList, List<Obj> newList。
实现如果 newObj.code = oldObj.code,则 newObj.value = oldObj.code
M为oldList的长度,N为newList的长度,穷举法的时间复杂度为N*M,hash法的时间复杂度为N+M。
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;
}
}
}
}
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。