数据对比简化:
有时候我们经常会有数据校验的操作,例如对比2个数组,2个List,简单的方式我们都懂,学校里都教过
例:
List<person> listA ;
List<person> listB;
假设集合A和集合B都有10条元素,每条数据都有name属性,现在需要判断B集合name与A集合name相同的和不相同的,
最直接的方式是,也是我们最早接触过的遍历方式去对比:
String same;
String notSame;
for(int a=0 ; a < listA.size() ; a++){
for(int b = 0 ;b< listB.size() ; b++){
if(listA.get(a).name().equals(listB.get(b).name()){
same + = listB.get(b).name() +“,”;
}else{
notSame += listB.get(b).name() +",";
}
}
}
这样循环对比就获取了2个字符串,same是相同name的字符串,并以逗号分隔,而notSame则相反,
这样其实效率是比较低的,这里我们使用了2层for循环,每个list都有10个元素的情况下,那么其实我们循环了100次来进行对比,
那假设我们有100个,1000个元素要对比呢?那效率是极其不客观的。
下面我们来优化该操作:
List listA ;
List listB;
Map<String,list> result = new HashMap<String,list>();
for(int a = 0 ; a < listA.size(); a++){
result.put(listA.get(a).name(),listA);
}
for(String name : listB){
List<person> listC = result.get(name);
if(listC == null ){
notSame = result.get(name).name();
}else{
same = result.get(name).name();
}
}
这里我首先遍历集合A将10条数据都放在一个Map中,并将名字作为KEY存放。
在遍历集合B依次用name去get()一下,、可以看的出,系统在循环的工作上只需20次即完成了2个集合的对比。