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

Roh*_*lla 8 java arraylist

我在公司编写的测试中遇到了与java的ArrayList相关的问题.我的查询只是实际问题的一小部分.

假设我们有以下函数将一个ArrayList复制到另一个:

void function(List<E> l)
{
    List<E> m = new ArrayList<E>(l);
}
Run Code Online (Sandbox Code Playgroud)

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

Collections.copy

System.Arraycopy

都加进去

但所有这些似乎比给定的方法慢.我需要一个比给定方法更快的方法,或者它是可用的最佳方法?

Jat*_*tin 5

首先我认为存在基准错误。public ArrayList(Collection<? extends E> c)使用Arrays.copyOf内部使用System.arraycopy(来源在这里)。因此System.arraycopyaddAll不能比您提到的代码慢。

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