有没有办法将数组复制到具有较少元素数量的相同数组

时间:2015-12-05 04:15:50

标签: java arrays arraycopy

我有一个包含8个元素的数组,我需要从中删除第一个元素并将其复制到同一个数组中。我使用System.arraycopy(...)尝试了它,但是数组的大小没有改变。

int[] array = {90,78,67,56,45,34,32,31};
System.arraycopy(array, 1, array, 0, array.length-1);

我需要的是,数组应该包含78,67,56,45,34,32,31个元素,数组大小为7

有一种方法可以通过将其复制到另一个数组并将其分配给第一个数组

来实现
int arrayB = new int[array.length-1];
System.arraycopy(array, 1, arrayB, 0, array.length-1);
array = arrayB;

但这不是我想要的方式。我需要它在没有另一个阵列的帮助下完成。

3 个答案:

答案 0 :(得分:3)

您无法在Java中更改数组的大小。因此,你想做的事情是不可能的。

FWIW:最简洁的方式复制到>> new<<将其大小减小一个的数组(根据您的示例)是:

int[] arrayB = Arrays.copyOfRange(arrayA, 1, arrayA.length);

你可以复制<<<<<<<<<使用循环或使用System.arrayCopy的数组。 arraycopy javadoc说:

  

"如果srcdest参数引用相同的数组对象,则执行复制就像位置srcPossrcPos + length - 1的组件一样首先将length组件复制到临时数组,然后将临时数组的内容复制到目标数组的destPosdestPos + length - 1位置。"

换句话说,您不需要做一个明确的双重复制。

答案 1 :(得分:3)

在Java中删除元素然后缩小数组大小是不可能的,因为数组具有固定长度。当需求如此时,人们使用不同的数据结构,如ArrayList等。

这里有很多选项,但没有一个是您正在寻找的答案。

delete-item-from-array-and-shrink-array
how-do-i-remove-objects-from-an-array-in-java

在上述问题中提出的选项中,我个人喜欢这个答案,

  

使用来自的ArrayUtils.removeElement(Object [],Object)   org.apache.commons.lang是迄今为止最简单的方法。

即使在这种情况下,诀窍是创建一个新大小的新数组并分配给相同的引用,因此原始数组已经消失但是,您的应用程序代码不需要创建两个数组。希望它有所帮助!!

答案 2 :(得分:0)

我认为你应该在java中尝试Arraylist<>

ArrayList arraylistobject = new ArrayList();

用于删除 arraylistobject.remove(对象); 它会自动减小arraylist.size()的大小; 试试这个问题最好。

<强>为什么吗

数组static in size,它是固定长度的数据结构,创建Array对象后无法更改长度。 ArrayList dynamic in size。每个ArrayList对象都有实例变量capacity,表示ArrayList的大小。随着元素添加到ArrayList,其容量会自动增长。

了解更多LINK