Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将一个数组列表复制到另一个数组列表的最快方法_Java_Arraylist - Fatal编程技术网

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

Java 将一个数组列表复制到另一个数组列表的最快方法,java,arraylist,Java,Arraylist,在一次公司笔试中,我遇到了一个与java的ArrayList相关的问题。我的问题只是实际问题的一小部分 假设我们有以下函数将一个ArrayList复制到另一个ArrayList: void function(List<E> l) { List<E> m = new ArrayList<E>(l); } void函数(列表l) { 列表m=新阵列列表(l); } 问题主要在于优化此复制操作。该列表可能包含一百万个条目。我尝试了以下方法: 收藏。复制

在一次公司笔试中,我遇到了一个与java的ArrayList相关的问题。我的问题只是实际问题的一小部分

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

void function(List<E> l)
{
    List<E> m = new ArrayList<E>(l);
}
void函数(列表l)
{
列表m=新阵列列表(l);
}
问题主要在于优化此复制操作。该列表可能包含一百万个条目。我尝试了以下方法:

收藏。复制

系统阵列拷贝

阿道尔


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

首先,我认为存在基准错误<代码>公共ArrayList(Collection如果变脏,则不安全会稍快一些。但是,您必须使用反射来访问ArrayList的底层对象数组。仅当您在性能方面处于生死攸关的情况下使用此选项


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

不,这是完全可用的最佳方法。Collections.unmodifiableList(list)速度更快,但可能不适合预期(我发现在问题中定义得非常糟糕).这实际上不应该比
System.arraycopy()快多少
,因为它可能调用非常相似的本机代码。不必要。不安全的复制是热点中的一个固有特性,不会进行边界检查。但是,只有复制许多小规模阵列时,差异才会很小且显著。这可能不值得,但是可以尝试一下不安全的版本。VM不是那么可预测的:-)