我的目标是:实现两个“相同”的列表,在尽可能少的时间内从这两个列表中删除不重合的对象。
我所取得的成就:两个相同的列表,删除非重合,但耗时太长。
我的问题是:
我有两个大列表(每个 800k 记录),这些列表充满了对象(HashCode 和 Equals 在这些对象上正确实现),我需要删除两个列表上的非重合记录。它可能只有 3-100 条记录(与 800k 寄存器相比没有)。
问题主要是性能,导致它需要 10 多分钟才能完成操作。
这是我尝试过的:
retainAll:这行得通,但耗时太长
使用 HashSet.retainAll:不能在我的列表中使用集合。这需要几秒钟,效果很好,但我需要重复
手动:从列表 1 中逐一查看列表 2,在第三个列表中不保存重合,在第四个列表中向后重复操作,然后对两个列表使用 removeAll。
迭代器:复制列表看起来是个好主意,从两个复制的列表中删除重合,这样我每个循环的项目更少,我只需要找到一次,因为剩余的不是重合。最后使用 removeAll 从原始列表中删除非重合,但仍需要 +-10 分钟。
我需要找到一种更快的方法来做到这一点,但无法弄清楚。
关于重复项:听起来很奇怪,但是对于我的程序,如果它们具有相同的“名称”但在我需要的其他属性中可能具有不同的值,则它们是相等的。