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

时间:2016-06-27 11:36:35

标签: java list

我有一份约100,000名Java员工的名单。现在我想快速从列表中删除特定的员工对象。没有迭代整个列表,有什么可能的方法呢? (如果我迭代每个对象,比较细节然后删除:这个场景需要很多时间)

2 个答案:

答案 0 :(得分:7)

您需要一种快速找到对象的方法。你可以

  • 对ArrayList进行排序,然后使用Collections.binarySearch 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课程可能适合您的需求。它以与链表相同的方式维护插入顺序,但它也具有恒定的时间插入和删除。