删除元素并将其余元素移到左侧

时间:2015-02-16 04:12:46

标签: java arrays

我是Java编程的新手。我想知道在删除所选元素后如何移动剩余的元素。问题是索引的结尾显示了与上一个索引相同的元素。我只想要输出:{1, 44, 5, 34, 8, 10, 11, 100, 0, 11, 0}

我的实际输出是:{1, 44, 5, 34, 8, 10, 11, 100, 0, 11, 11}

我会告诉你我的实际代码。我不需要ArrayList或List工作。我想在没有它们的情况下进行测试。

for (int i = indexToDelete; i < array.length-1; i++) {
        array[i] = array[i+1];
        size--;
    }
for (int i = 0; i < array.length; i++) {
    System.out.println("The element at index " + i + ": " + array[i]);
} //END for()            
System.out.println(size);

4 个答案:

答案 0 :(得分:2)

您无法直接从已分配的数组中删除该项目。您有两个选择:

  1. array = Arrays.copyOf(array, array.length - 1); - 这创建了一个副本,删除了最后一个元素
  2. 转换为数组列表并调用remove方法。
  3. #1的样本:

        int[] array = {1,2,3};
        int indexToDelete = 1;
        for (int i = indexToDelete; i < array.length-1; i++) {
             array[i] = array[i+1];
        }
        array = Arrays.copyOf(array, array.length - 1);
        for (int i = 0; i < array.length; i++) {
            System.out.println("The element at index " + i + ": " + array[i]);
        }
    

    输出:

    The element at index 0: 1
    The element at index 1: 3
    

答案 1 :(得分:0)

如果要将最后一个元素设置为零,则应将最后一个元素设置为零:

for (int i = indexToDelete; i < array.length-1; i++) {
    array[i] = array[i+1];
    size--;
}
array[array.length-1] = 0;

您可能应该检查您的阵列是否实际包含任何元素。

答案 2 :(得分:0)

您可以制作没有最后一个元素的数组副本:

array = Arrays.copyOf(array, array.length - 1);

答案 3 :(得分:0)

您可以保留另一个int变量来存储数组的当前大小(删除元素后)。

或者,您可以从末尾删除元素并使用Arrays.copyOf(int \[\], int)

最重要的是,无论您使用哪两种方法,如果要从中间删除元素,您可以考虑将最后一个元素复制到已删除元素的位置,而不是将所有后续元素移位1。这对你有用,那么它会更有效率。