将一个数组列表复制到另一个列表的最快方法

在公司书面测试中,我遇到了一个与java的ArrayList有关的问题。 我的查询只是实际问题的一小部分。

比方说,我们有以下功能将一个ArrayList复制到另一个:

void function(List<E> l)
{
    List<E> m = new ArrayList<E>(l);
}

这个问题基本上要求优化这个复制操作。 该列表可能包含一百万个条目。 我尝试了以下方法:

Collections.copy

System.Arraycopy

全部添加

但所有这些似乎都比给定的方法慢。 我需要一种比给定方法更快的方法,还是最好的方法?


那么首先,我认为存在基准误差。 public ArrayList(Collection<? extends E> c)使用Arrays.copyOf ,它在内部使用System.arraycopy (Source here)。 因此System.arraycopyaddAll不能比你提到的代码慢。

对于这个问题,由于操作必须是O(n) ,因此不可能有更快的方式(因为您希望不会丢失类型信息,这可能会节省时钟周期但非常微不足道O(n)System.arraycopy是最快的方法,因为它使用本地调用来快速复制它们。


如果你变脏,不安全会稍微快一点。 但是,您必须使用反射访问ArrayLists的基础Object数组。 只有在您处于生命或死亡状态时才使用此功能。

public native void copyMemory(java.lang.Object o,long l,java.lang.Object o1,long l1,long l2);

链接地址: http://www.djcxy.com/p/17027.html

上一篇: Fastest way to copy one array list to another

下一篇: mysql regex utf