从数组中删除一些项目并在Java中收缩数组

时间:2014-01-26 15:29:52

标签: java arrays resize shrink

我有一个这样的数组:
double [] my_input_array = {0,1,2,3,4,5,6,7,8};
以及一些已知的位置,表示从阵列中删除项目的位置 例如,如果位置是3和7,我想获得 my_output_array = {0,1,2,4,5,6,8};

所以我希望有这样的功能:

public double[] getShinkedArray(double[] my_input_array, int... positions){
    /* SOME CODE */
    return my_output_array;
}

我注意到了这个问题Delete item from array and shrink array但是这些答案每次只从一个数组中删除一个元素。

2 个答案:

答案 0 :(得分:2)

您无法缩小数组,需要使用新大小创建一个新数组。你可以这样做:

public double[] getShinkedArray(final double[] my_input_array, final int... positions) {
    double[] outputArray = new double[my_input_array.length - positions.length];
    for (int i = 0, j = 0; i < my_input_array.length; i++) {
        if (Arrays.binarySearch(positions, i) < 0) {
            outputArray[j++] = my_input_array[i];
        }
    }
    return outputArray;
}

答案 1 :(得分:0)

创建一个新数组,循环遍历旧数组,循环的每一步检查positions中是否存在循环索引。如果是,请转到循环的下一次迭代。如果不是,请将旧数组中该索引处的元素添加到新数组中。返回新阵列。