从两个list集合中找出不同的记录

javacc 发布于 2012/08/07 15:26
阅读 2K+
收藏 0

每个list集合都有几十万条记录。

两个list中通过订单号匹配,并判断其余两个字段的值是否相同。

请问有没有什么简单的算法解决匹配耗时的问题。

加载中
0
喜之郎
喜之郎
不知道什么意思。是不是List集合中对象的三个属性相同就算是相同的记录?
0
javacc
javacc

引用来自“喜之郎”的答案

不知道什么意思。是不是List集合中对象的三个属性相同就算是相同的记录?
对,就是三个字段值都相同的记录,视为同一条记录。
0
静虚
静虚
问题没有说明白。最终结果是不是要找出两个字段值不同的对象来。
0
javacc
javacc

引用来自“jj_fly”的答案

问题没有说明白。最终结果是不是要找出两个字段值不同的对象来。

确实没有说明白。哎!!!

就是要找出不同的记录并表示异常,导出异常记录报表。

0
静虚
静虚

这样的话可以考虑一下将任务分解成几个线程去处理。比如List a, List b。

线程1: for (i=0; i<n; i++) {/*遍历a*/

for (j = 0; j<b.length; j++) {/*遍历b*/

}

}

 

线程2: for (i=n+1; i<M; i++) {/*遍历a*/

for (j = 0; j<b.length; j++) {/*遍历b*/

}

}

这样的话时间上应该会快点

 

静虚
静虚
@mental 线程在一定程度上还是可以缩短处理时间的。不过像这个遍历用hash还是最快的。
mental
mental
多线程只是分配时间片,只不能缩短时间,除非是多个CPU的并行运算
0
javacc
javacc

引用来自“jj_fly”的答案

这样的话可以考虑一下将任务分解成几个线程去处理。比如List a, List b。

线程1: for (i=0; i<n; i++) {/*遍历a*/

for (j = 0; j<b.length; j++) {/*遍历b*/

}

}

 

线程2: for (i=n+1; i<M; i++) {/*遍历a*/

for (j = 0; j<b.length; j++) {/*遍历b*/

}

}

这样的话时间上应该会快点

 

是个方法,不知道还有没有其它的办法呢。

 

比较高明的算法。。。。

0
xmut
xmut
简单的方法就是先将它们导入数据库,再使用SQL查询解决,最后再导出来!
0
javacc
javacc

引用来自“xmut”的答案

简单的方法就是先将它们导入数据库,再使用SQL查询解决,最后再导出来!

嘿嘿,我猜就会有人这样说。不过这种方法不行!

要用java程序解决。

0
canghailan
canghailan

其实都在内存中,几十万数据也很快吧。

订单号唯一?把其中一个以订单号为Key,记录为Value放到HashMap中,循环另一个查找比对。

mahone
mahone
+1
0
javacc
javacc

引用来自“canghailan”的答案

其实都在内存中,几十万数据也很快吧。

订单号唯一?把其中一个以订单号为Key,记录为Value放到HashMap中,循环另一个查找比对。

有两个字段啊,map(key,字段1)map(key,字段2)?

hashMap是什么数据结构的啊 他更快吗?

感觉遍历的话arraylist是不是更快些。

canghailan
canghailan
查找用hash是比较高效的,理论查找时间复杂度O(1)
返回顶部
顶部