Arraylist.remove(索引)方法的效率?

时间:2015-03-26 06:10:43

标签: java arraylist

我正在使用arrayList.remove(index)函数。我想从数组中删除40320个元素,它将在我的程序执行中完成9次。这花了很多时间。这导致程序执行缓慢。有没有有效的方法呢?

3 个答案:

答案 0 :(得分:1)

如果必须使用ArrayList,则每次删除操作的效率都为O(n),因为每次删除元素时都必须调整列表的大小。如果您可以使用线性访问列表,那么我建议您使用LinkedList数据结构。但请注意,这会增加查找时间。

如果你不会迭代元素而你只需要知道元素是否存在,那么HashSet就应该这样做。

答案 1 :(得分:1)

使用Java 8,你可以使用这样的流(甚至是并行流):

List<YourType> theFilteredList = theList.parallelStream()
        .filter(yourPredicate)
        .collect(Collectors.toList());

这将利用计算机中的核心数量。对于大数据集,性能提升将是显着的。

小心谓词。它应该用函数式写,这意味着你不应该改变其他对象的状态!

您可以选择使用lambda函数作为谓词。不确定这是否会提高性能......

答案 2 :(得分:0)

您可以像这样使用listIterator

for (ListIterator<E> iter = list.listIterator(list.size()); iter.hasPrevious();)
{
    if (itemsToDelete(iter.previous()))  iter.remove();
}

或者正如MadProgrammer建议您可以使用removeAll()方法将ArrayList与要删除的对象一起传递。

Remove方法的时间复杂度而言,它是O(n),因为你必须将那些元素上面的元素混合在一起&#34; left&#34;一个人。