//对比ListOld和ListNew的差异
public static List<String> getDiff(List<String> ListOld, List<String> ListNew) {
//程序开始时间
long st = System.nanoTime();
//获取相同的元素放入ListC
List<String> ListC = new LinkedList();
Map<String, String> listMap = new HashMap();
//取得相同的元素
Iterator<String> iteratorA = ListOld.iterator();
while (iteratorA.hasNext()) {
String tempInteger = iteratorA.next();
listMap.put(tempInteger, tempInteger);
}
Iterator<String> iteratorB = ListNew.iterator();
while (iteratorB.hasNext()) {
String tempInteger = iteratorB.next();
if (listMap.containsKey(tempInteger)) {
ListC.add(tempInteger);
}
}
ListOld.removeAll(ListC);
ListNew.removeAll(ListC);
//差异元素
//ListOld.addAll(ListNew);
//分辨结束
System.out.println("total times "+(System.nanoTime()-st));
return ListOld;
}
因为我需要知道,两个list的元素的差异,并不是求得两个list的差异元素和。所以,我在比较后,返回的是listold。当调用的时候,需要调用两次。两次传入的list需要调换位置,这样可以分别获取到旧数据和新数据的不同,新数据和旧数据的不同。如果不需要如此的话,可跟实际情况调整。
List<String> diff = StringUtils.getDiff(ListOld, ListNew);
List<String> diff1 = StringUtils.getDiff(ListNew, ListOld);
System.out.println(diff.toString());
System.out.println(diff1.toString());
|