數據對比簡化:
有時候我們經常會有數據校驗的操作,例如對比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個集合的對比。