array.remove()提供IndexOutOfBoundsException

时间:2019-02-11 08:54:08

标签: java android arrays

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

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

我一直在寻找可能解决该问题的任何解决方案,但是我什么也没发现,所以我希望这里的人能够告诉我为什么会这样。

我要编辑的数组是一个Integer数组(从String数组转换)。让我给你看一些代码。

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。我不知道错误在哪里。

提前谢谢!

activos arrat content

idTag value

解决方案:

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

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

代替:

activos.remove(idTag);

3 个答案:

答案 0 :(得分:1)

ArrayList类有2个要删除的重载方法。一个带有整数参数的   删除该索引处的项目,以及具有Object参数的项目。Java中的重载解析始终在不考虑装箱和拆箱的情况下开始。 因此,它优先考虑remove(int)重载。 应该将索引传递给Arraylist的remove方法。尝试将行替换为

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

答案 1 :(得分:1)

ArrayList类有2个方法

第一个是:list.remove(index):-其删除索引值

第二个是:list.remove(object):-删除特定对象

在interger类型的arraylist中,从arraylist中删除特定对象

Java代码

使用此代码

 if(list.contains(255)){

        list.remove(Integer.valueOf(255));
    }

答案 2 :(得分:1)

Avvappa Hegadyal正确地提到,删除可以通过索引(int类型)或通过对象(某些非原始类型)实现。

您遇到了IndexOutOfBoundException,因为调用了第一个重载方法(通过id删除元素)-但是在数组中没有索引255(只有一个索引为0的元素)

如果要删除元素255。请确保变量idTag的类型为Integer(而不是int)。因此,第二个重载方法将被调用。