使System.Arraycopy等效于一个函数

时间:2014-10-19 19:57:39

标签: java arrays loops for-loop arraycopy

我需要帮助重写函数,以便System.arraycopy()执行函数所做的工作。

例如,我的代码:

for( int k = 0; k <= i - 1; k++ ) {
    a[ j + k ] = a[ j + k + 1 ];
}

相当于:

System.arraycopy( a, j + 1, a, j, i );

但我无法弄清楚如何做到这一点:

for ( int k = n; k > i; k-- ) {
    a[ j + k ] = a[ j + k - 1 ];
}

感谢您的任何意见。

2 个答案:

答案 0 :(得分:1)

让我们先简化,因为你的第二个循环似乎比必要的复杂一点。当n = 3,i = 1,j = 2时,你的循环会将a = [1,2,3,4,5,6,7]变换为a = [1,2,3,4,4,5, 7]。换句话说,循环将n-i个元素向右移位一个位置,从索引j + i开始。所以,实际上你只需要两个参数而不是三个参数。 (让我们将它们定义为x = n-i和y = j + i。)

现在,给出System.arraycopy()

上javadoc的以下摘录
  

如果src和dest参数引用相同的数组对象,则执行复制,就好像位置srcPos到srcPos + length-1的组件首先被复制到具有长度组件的临时数组,然后是临时数组被复制到目标数组的destPos + length-1的destPos位置。

我的结论是System.arraycopy(a, y, a, y+1, x);做了你想要的。或者,如果您使用的变量是给定的System.arraycopy(a, j+i, a, j+i+1, n-i);

我没有测试过,所以让我知道它是否有效;)

答案 1 :(得分:0)

看起来你的第二个循环打算将元素i(不包括)从n(包括)移动到右边的一个位置:

System.arraycopy(a, i + 1, a, i + 2, n - i);