gpt4 book ai didi

java - 删除两个 ListProperty 中不重合的部分

转载 作者:行者123 更新时间:2023-12-01 18:10:51 25 4
gpt4 key购买 nike

我的目标是:实现两个“相同”列表,在尽可能短的时间内从两个列表中删除不重合的对象。

我所取得的成就:两个相同的列表,删除了不重合的内容,但花费的时间太长。

我的问题是:

我有两个大列表(每个列表有 800k 条记录),这些列表中充满了对象(在这些对象上正确实现了 HashCode 和 Equals),我需要删除两个列表上不一致的记录。它可能只有 3-100 条记录(与 800k 寄存器相比根本不算什么)。

问题主要是性能问题,导致该操作需要 10 多分钟才能完成。

这是我尝试过的:

  • retainAll:这有效,但需要太长时间

  • 使用 HashSet.retainAll:无法在我的列表中使用集合。这需要几秒钟,效果很好,但我需要重复

  • 手动:从列表 1 中逐一查找列表 2,在第三个列表中不保存重合项,在第四个列表中向后重复操作,然后对两个列表使用 removeAll。

  • 迭代器:看起来复制列表是个好主意,从两个复制的列表中删除重合,这样我每次循环的项目就会减少,而且我只需要查找一次,因为其余的不是重合的。最后使用removeAll从原始列表中删除不重合的内容,但仍然需要+-10分钟。

我需要找到一种更快的方法来做到这一点,但无法弄清楚。

关于重复项:听起来很奇怪,但对于我的程序来说,如果两个对象具有相同的“名称”,但在我需要的其他属性中可能具有不同的值,则它们是相等的。

最佳答案

不理解为什么名称相等但值不相等的所有原因..或者甚至不理解如何确定列表 A 是否有“foo”,并且如果您想保留所有“,列表 B 是否有 2x “foo”富”...

这是一个想法..将“名称”的哈希集创建为同名对象的数组...现在您可以使用retainAll,然后从哈希集值快速重建原始集合。

关于java - 删除两个 ListProperty 中不重合的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60470093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com