例如:财务中的对账,数据源一个是银行日记账(aList),一个是银行对帐单(bList),业务操作就是把两个List里面金额相同的记录筛选掉,剩下金额不相等的。
在实际开发中我目前知道有两个方式(假设两个List各有1000条数据):
1、最简单的就是用双重循环进行比较,虽然简单,但是如果两个List的数据量都很大,那么运行时间将成数量级增长。循环次数为1000*1000
2、把一个List通过循环放入Map中,把需要比较的字段作为Map的Key,然后循环另外一个List,到Map里面去匹配。
for(A a : aList){ map.put(a.amount,a); } for(B b : bList){ A a = map.get(b.amount); if(a==null){ //a==null则说明没有同b匹配的项 }else{ //a!=null则说明匹配上了 } }
由于在Map中取数非常快,主要的耗时就在业务处理和循环上。循环次数为1000*2
但是第2种方法还是有不足的地方:
1、当比较的值有相同的时候,由于Key必须唯一,所以后面的值会覆盖掉前面的数据
2、当比较的内容比较复杂,或者是多项的时候,就比较难处理
我想在平时开发中大家应该都会遇到这样的问题吧,不知道大家有没有更好的方法来解决这个问题!!