将数组复制到同一个数组

时间:2015-02-12 00:40:20

标签: java arrays

所以我有一个带有元素[10]的数组,我从数组的顶部添加了这样的东西

[ “”, “”, “”, “”, “”,5,4,3,2,1]

当我删除一个元素时,我想把它移到它下面取代它

[ “”, “”, “”, “”, “”,5,3,2,1]

public void moveUP(int location, int Arraysize) {

    System.arraycopy(vehicle, 0, vehicle, 0, location + 1);
}

我尝试使用数组副本,但是当我检查调试器时,元素保持不变。

编辑:忘了提到该位置是我计划删除的元素。

3 个答案:

答案 0 :(得分:1)

我认为正确的功能应如下所示:

public void moveUP(int location, int arraysize){
    System.arraycopy(vehicle, 0, vehicle, 1, location-1);
    vehicle[0] = "";
}

这会将每个元素从0移动到位置1,从一个位置移动到另一个位置,所以它在位置1 ...位置上复制之后(所以位置上的元素被删除)

答案 1 :(得分:0)

我认为通过System.arraycopy的一次调用无法做到这一点。您可以使用arraycopy将数组的所有元素向左或向右移动(假设您有足够的空间),但无论哪种方式,都会有旧的剩余元素,这些元素仅被复制而未设置为0 / null。例如:

int[] test = new int[] {0,0,7,7};
System.arraycopy(test, 2, test, 1, 2); // this will shift all elements 
                                       // starting at position 2 to position 1
// but test now looks like this = [0,7,7,7]

所以最后7仍在那里。对此的解决方案可能如下所示:

int[] newArr = new int[oldArr.length];
System.arraycopy(oldArr, 0, newArr, 0, posToBeDeleted);
System.arraycopy(oldArr, posToBeDeleted+1, newArr, posToBeDeleted, elemsRemaining);
oldArr = newArr;

答案 2 :(得分:0)

destPos参数是第四个,而不是第五个。您的调用应该看起来像System.arraycopy(vehicle, 0, vehicle, location, Arraysize),假设您要从0转换为location,并且数组中有Arraysize个元素。