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