Java 将一个数组列表复制到另一个数组列表的最快方法
在一次公司笔试中,我遇到了一个与java的ArrayList相关的问题。我的问题只是实际问题的一小部分 假设我们有以下函数将一个ArrayList复制到另一个ArrayList: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); } 问题主要在于优化此复制操作。该列表可能包含一百万个条目。我尝试了以下方法: 收藏。复制
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不是那么可预测的:-)