将一个数组列表复制到另一个列表的最快方法
在公司书面测试中,我遇到了一个与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.arraycopy
或addAll
不能比你提到的代码慢。
对于这个问题,由于操作必须是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