我有一份约100,000名Java员工的名单。现在我想快速从列表中删除特定的员工对象。没有迭代整个列表,有什么可能的方法呢? (如果我迭代每个对象,比较细节然后删除:这个场景需要很多时间)
答案 0 :(得分:7)
您需要一种快速找到对象的方法。你可以
O(log N)
执行二进制搜索注意:实际从ArrayList中删除元素为O(n)
而LinkedList为O(1)
用于删除,二进制文件搜索它将毫无意义,即比O(N)
O(1)
摊销。如果您想保留一些订单,例如插入顺序,则可以使用LinkedHashSet
。enabled
这样的字段,你设置为false
而不是实际删除它。您可以在以后的某个时间(隔夜或周末)将其删除作为批处理作业答案 1 :(得分:2)
现在我想从列表中删除一个特定的员工对象......
您可以使用List.remove执行此操作
......很快
实际上,即使删除项目可能是O(1)
操作,在列表的整个长度上进行迭代也是O(n)
,而且,正如您所预测的那样,并不是非常快。
我觉得你的问题最好是通过hashmap的强大功能来实现的。这具有不断的查找和删除时间。 LinkedHashMap课程可能适合您的需求。它以与链表相同的方式维护插入顺序,但它也具有恒定的时间插入和删除。