很多人都说ArrayList.removeAll
对于大尺寸阵列来说真的很慢。
这个article为ArrayList.removeAll速度提供了两个优化的解决方案,但需要在类本身中实现它们,并且不能在外部用作修复。
有没有办法应用这种修复,而不是复制ArrayList源代码并使用我自己的版本?
编辑:我想我应该添加我对此的需求,因为如果没有ArrayList.removeAll,可能有办法做我想做的事。
我有两个每个70,000 longs
左右的列表。它们几乎完全相同,但是一个列表中有第二个列表没有的更多数字,我想找到它们。我知道找到它们的唯一方法是first.removeAll(second)
找到差异。还有另一种方式吗?
答案 0 :(得分:9)
如何使用具有更好删除时间的数据结构,例如HashSet或TreeSet?因此使用arraylist的主要原因是访问记录的快速访问时间O(1)。但是,如果你想设置差异,那么也许你应该使用集合。只是一个想法。
答案 1 :(得分:1)
您可以创建ArrayList
的子类来优化该方法(可能还有其他方法)。