首页 > 解决方案 > array.remove() 给出 IndexOutOfBoundsException

问题描述

我正在尝试从数组中删除一个项目(obv,如果数组包含它),但它总是在尝试删除它时给我一个 IndexOutOfBoundsException。

我认为这个问题与评论部分中指出的问题不同,因为我试图弄清楚为什么在这种特定情况下这会给我一个错误。

我一直在寻找任何可能解决它的解决方案,但我一无所获,所以我希望这里有人能够告诉我为什么会发生这种情况。

我要编辑的数组是一个整数数组(从字符串数组转换而来)。让我给你看一些代码。

for (final Alarm alarm : allAlarms) {
    ArrayList<Integer> activos = IntegerArrayConverter.fromString(alarm.getActiveTags());
    if (activos.contains(idTag)) {
        activos.remove(idTag);
        alarm.setActiveTags(IntegerArrayConverter.fromArrayList(activos));
        app.updateAlarmActiveTags(alarm);
    }
}

它在它说的地方崩溃:

active.remove(idTag);

当应用程序到达该行时,我的数组大小为 1,它的唯一值是 255。idTag 值也是 255。我不知道错误在哪里。

先感谢您!

活动内容

idTag 值

解决方案:

正如他们在评论部分告诉我的那样,我将 ArrayList 的创建移到了for循环之外,并且还使用了:

activos.remove(Integer.valueOf(idTag));

代替:

activos.remove(idTag);

标签: javaandroidarrays

解决方案


ArrayList 类有 2 个要删除的重载方法。一个带有整数参数,用于删除该索引处的项目,另一个带有 Object 参数。Java 中的重载解决方案总是在不考虑装箱和拆箱的情况下开始。因此它优先考虑 remove(int) 重载。应该将索引传递给 Arraylist 的 remove 方法。尝试用

activos.remove(0); 或 activos.remove(new Integer(255)); 迭代元素时不建议使用 ArrayList.remove()


推荐阅读