【问题标题】:How to Delete All Elements That Have an Even Index in Java ArrayList如何删除Java ArrayList中具有偶数索引的所有元素
【发布时间】:2015-02-28 18:02:37
【问题描述】:

我正在尝试编写一个方法来删除所有具有偶数索引的 ArrayList 元素。我想在不使用任何辅助数据结构的情况下完成此操作。我在想我应该将所有偶数索引项设置为空。然后,我将尝试删除所有空元素。

示例:

{1, 2, 3, 4, 5, 6}

应该改成这个

{1, 3, 5} 

我能够找到偶数位置,但我仍然不知道如何从 ArrayList 中删除它们。

public void removeEvenElems() {

    for (int i = 0; i < size; i++) {
        if (i % 2 == 0) {
            //how to delete array[i] ?

        }
    } 
}

【问题讨论】:

  • 您是否查看过 ArrayList 类的 Javadoc 以查看是否有名称类似于 deleteremove 的方法?
  • 这是不可能的。您不能在不调用任何方法的情况下从列表中删除任何内容。提示:最好从列表末尾开始,否则,在索引 3 处删除后,索引 4 处的元素现在位于索引 3 处。
  • 为什么只在新的列表/数组列表中插入所需的元素并将原来的元素设置为空?
  • 你的任务肯定不是“不调用任何方法就这样做”。它可能是“在没有定义任何方法的情况下执行此操作”或类似的东西,但与ArrayList 交互的唯一方法是调用它的方法,因此发布的问题是不连贯的。
  • @Tom 我的错。有一瞬间,齐祖看起来像汤姆。他们称之为......暂时的精神错乱:-)

标签: java arraylist


【解决方案1】:

这个可以试试:

当前为1,每次进入循环存储奇数元素时增加2

public void removeEvenElems() {
    current = 1;
    for (int i = 0; i < size; i++) {
        nodes[i] = nodes[current];
        size--;
        current = current + 2;
    }
}

【讨论】:

    【解决方案2】:

    由于您不想使用 ArrayList 或调用任何其他函数,因此此代码会创建一个新数组

    public void removeEvenElems(int[] array) {
        int[] temp = new int[array.length];
        int spot = 0;
        for (int i = 0; i < array.length; i++) {
            if (i % 2 == 1) {
                temp[spot] = array[i]; 
                spot++;
            }
        }
        System.arraycopy( temp, 0, array, 0, spot+1 );
    }
    

    【讨论】:

    • 那么调用这个方法有什么意义呢?它不会改变任何东西。或者让我问你一个问题:你认为array = temp.clone(); 的结果是什么?这对传递给该方法的数组有何影响?
    • 我无法使用 .colne() 创建新数组和您的解决方案;不能用
    • @RyanShtirmer 请回答我的这部分问题:这对传递给此方法的数组有何影响?谢谢。
    • 我想我没有尽职尽责地理解 .clone 并且从我查看的(错误的)示例代码中我认为它会将 temp 复制到数组中。我会尽快解决这个问题。
    • spot+1 看起来不正确,一个包含十个整数元素的数组的简短示例给我带来了这个:[2, 4, 6, 8, 10, 0, 7, 8, 9, 10]。请改用System.arraycopy(temp, 0, array, 0, array.length);
    猜你喜欢
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多