Java 如何使用for循环将返回对象数组复制到另一个数组中
假设我有一个返回数组的方法,如果我想使用for循环复制该数组的副本来复制每个元素:Java 如何使用for循环将返回对象数组复制到另一个数组中,java,arrays,methods,copy,Java,Arrays,Methods,Copy,假设我有一个返回数组的方法,如果我想使用for循环复制该数组的副本来复制每个元素: for(int i=0; i < array.length;i++) { copy[i] = someMethod()[i]; } for(int i=0;i
for(int i=0; i < array.length;i++)
{
copy[i] = someMethod()[i];
}
for(int i=0;i
每次我们复制一个元素时,这个for循环会重做somethod吗?或者它执行该方法并将其存储在某个位置,然后复制每个元素以进行复制。
我在问一个关于高效运行时的问题:在第一种情况下,如果someMethod是一个复杂的方法,那么运行时可能会显著增加
编辑:假设array.length是指someMethod返回的数组的长度
…每次我们复制一个元素时,这个for循环会重做somethod吗
是的,每次都创建一个新数组。编译器或JVM不会为您只进行一次调用而重写循环。JVM进行了大量优化,但(大部分)没有改变您在代码中指定的基本行为
如果不希望该方法每次迭代都重新运行,请不要在循环体中调用它。在循环之前调用它一次,记住它返回的数组,然后使用它
旁注:另请参见。是,它为循环的每次迭代调用someMethod()。如果要存储返回的值,请在循环外部调用someMethod(),如下所示:
注意:我已尝试修复您的语法。此外,您还需要确保拷贝数组已正确初始化为所需的大小
someMethod();
for(int i=0; i < array.length;i++)
{
copy[i] = *array*[i];
}
someMethod();
for(int i=0;i
它将在每次迭代中执行对someMethod
的调用。数组是可克隆的,因此您可以使用copy=someMethod().clone()代码>您使用的是什么数组
的长度?只要copy
,返回的任何someMethod()
都会一样长吗?啊,是的,在创建我所指问题类型的示例时,这是一个错误。假设array.length引用SomeMethod指定的数组长度,但我不能。你怎么事先知道的?实际上,我们甚至不知道someMethod()的结果长度是否可以在该方法的两个相邻调用之间更改。如果someMethod返回嵌套数组,是否有类似的方法使用?@Allan不仅类似,而且完全相同。只需注意是否需要“深度副本”。只要我数组中的对象是原语,我就可以安全地将此方法用于嵌套数组?@Allan:我想你的意思是你有一个数组,例如int[][]
或类似的数组arraycopy
复制顶级的值,就像您的for
循环一样。在这两种情况下(arraycopy
和您的for
循环),如果数组是引用类型(一个int[][]
是一个int[]
的数组,这是一个引用类型),则结果将是一个新数组,其条目引用的数组与原始数组引用的数组相同。在这两种情况下,如果您也想复制这些阵列,则需要进行深度复制。您的for
循环和arraycopy
执行浅拷贝。