复制数组 - 初始大小是否重要?

Str*_*tfw 1 java arrays

所以我是Java的新手,所以这个问题可能看起来有点傻,但无论如何......假设我们有这样的代码:

int[] oneArray = {1,2,3,4,5,6,7,8,9,10};
int[] anotherOne = new int[150];
anotherOne = Arrays.copyOf(oneArray, oneArray.length);
Run Code Online (Sandbox Code Playgroud)

当我打印anotherOne时,无论初始大小是什么,在copyOf方法之后它将是我们所说的所述函数的第二个参数.在上面的例子中,数组将缩小为10个元素(或者指针将开始指向内存中的另一个位置,我想在那里创建了一个新的10元素数组?).所以,我说错或anotherOne的初始大小没有任何意义可言,如果它的创建只是成为在未来的某个点的副本,它应该是不指定大小(INT [] anotherOne;)初始化?

Luk*_*der 9

相反,这样做.这样可以避免创建不需要的中间数组.

int[] oneArray = {1,2,3,4,5,6,7,8,9,10};
int[] anotherOne = Arrays.copyOf(oneArray, oneArray.length);
Run Code Online (Sandbox Code Playgroud)

但是,如果你真的需要你的第二个数组长度150,那么你可以这样写:

int[] oneArray = {1,2,3,4,5,6,7,8,9,10};
int[] anotherOne = new int[150];
System.arraycopy(oneArray, 0, anotherOne, 0, oneArray.length);
Run Code Online (Sandbox Code Playgroud)


nba*_*lle 6

Arrays.copyOf已经复制了.您不需要anotherOne在此之前初始化:

int[] oneArray = {1,2,3,4,5,6,7,8,9,10};
int[] anotherOne = Arrays.copyOf(oneArray, oneArray.length);
Run Code Online (Sandbox Code Playgroud)

你的代码会发生什么

  • oneArray 在内存中创建一个数组
  • anotherOne 在内存中创建一个150整数的数组
  • Arrays.copyOf方法创建第三个数组,并使变量anotherOne指向此数组.结果是没有更多的引用你的150个元素的数组,所以它将被垃圾收集.

这意味着,在实践中,您的代码将完美地工作,但您正在使用CPU时间(和内存很短的时间)来创建和擦除150个整数的数组.