如何在Java中删除特定的List对象?

7

我有一个包含大约100,000名员工的Java列表。现在我想快速从该列表中删除特定的员工对象。有哪些可能的方法可以在不遍历整个列表的情况下完成此操作?(如果我逐个遍历每个对象,比较细节然后删除:这种情况需要很长时间)


UR_object_List.remove(object) - Nandakishore Shetty
2个回答

7
您需要一种快速找到对象的方法。您可以:
  • 使用已排序的ArrayList并使用Collections.binarySearch进行二分查找,时间复杂度为O(log N) 注意:从ArrayList中实际删除元素的时间复杂度为O(n),而LinkedList的删除时间复杂度为O(1),但在其中进行二分查找将是无意义的,即比O(N)慢得多。
  • 您可以拥有一个Employee的哈希集合,并且删除操作的摊销时间复杂度为O(1)。如果您想保留某些顺序(例如插入顺序),则可以使用LinkedHashSet
  • 您可以使对象可变,并具有像enabled这样的字段,将其设置为false,而不是实际删除它。您可以稍后作为批处理作业在某个时间(隔夜或周末)将其删除。

1
@TimBiegeleisen SO不是Quora,哈哈 https://www.quora.com/Is-it-true-that-after-Brexit-Pluto-will-be-a-planet-in-the-UK-again ;) - Peter Lawrey

2
现在我想从列表中删除特定的员工对象...
你可以使用List.remove来完成这个操作。
...快速地
实际上,即使删除项目可能是一个O(1)操作,但遍历整个列表的长度是O(n),正如你所猜测的那样,不是非常快。
我觉得哈希表的强大功能可以更好地解决你的问题。它具有恒定的查找和删除时间。LinkedHashMap类可能适合你的需要。它以与链表相同的插入顺序维护插入顺序,但也具有恒定的插入和删除时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接