Java:制作初始ArrayList的本地副本的最快方法?
我的代码要求我在每次调用函数时创建一个大的(301x301x19项)ArrayList,它有一些初始值(一些是0,一些是1,等等)。起始值总是相同的,每次调用函数时都需要将其加载到数组中,以便函数有自己的初始值副本来处理 最初,每次调用函数时,我都会重新计算数组,但结果证明速度慢得可笑;相反,我现在只计算初始数组一次,并且每次调用函数时都制作它的本地副本(这样我就可以在不更改初始数组值的情况下更改值) 但是,复制数组的速度仍然非常慢(仅复制此数组就花费了超过3/4的计算时间)。我尝试了以下方法:Java:制作初始ArrayList的本地副本的最快方法?,java,arrays,arraylist,Java,Arrays,Arraylist,我的代码要求我在每次调用函数时创建一个大的(301x301x19项)ArrayList,它有一些初始值(一些是0,一些是1,等等)。起始值总是相同的,每次调用函数时都需要将其加载到数组中,以便函数有自己的初始值副本来处理 最初,每次调用函数时,我都会重新计算数组,但结果证明速度慢得可笑;相反,我现在只计算初始数组一次,并且每次调用函数时都制作它的本地副本(这样我就可以在不更改初始数组值的情况下更改值) 但是,复制数组的速度仍然非常慢(仅复制此数组就花费了超过3/4的计算时间)。我尝试了以下方法:
// oldList is an ArrayList<Byte>
ArrayList<Byte> newList = new ArrayList<Byte>(oldList);
// oldList is an ArrayList<Byte>
ArrayList<Byte> newList = new ArrayList<Byte>();
newList.addAll(oldList);
// oldList is a Byte[]
ArrayList<Byte> newList = new ArrayList<Byte>(Arrays.asList(oldList));
//oldList是一个ArrayList
ArrayList newList=新ArrayList(旧列表);
//oldList是一个数组列表
ArrayList newList=新的ArrayList();
newList.addAll(oldList);
//oldList是一个字节[]
ArrayList newList=newarraylist(Arrays.asList(oldList));
所有这些方法对于我的应用来说都太慢了;有没有比这更快的技巧,或者我运气不好?总之:
- 注意:要看到上述影响,我们必须讨论非常高的分配率和丢弃率。大多数算法,做一些分配和复制在这里和那里不会看到这些问题;现代JVM甚至可以处理相当高的速率,这些问题直到超过阈值并且我们在磁极上旋转的板开始撞击地板时才会发生
- 注意:要看到上述影响,我们必须讨论非常高的分配率和丢弃率。大多数算法,做一些分配和复制在这里和那里不会看到这些问题;现代JVM甚至可以处理相当高的速率,这些问题直到超过阈值并且我们在磁极上旋转的板开始撞击地板时才会发生
在内存中保留数组中的字节不是有效的计算。我想知道你为什么要使用数组/列表?如果您可能这样做,请使用流