我试图从数组中删除一个项目(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。我不知道错误在哪里。
提前谢谢!
解决方案:
正如他们在评论部分告诉我的那样,我将ArrayList的创建移到了 for 循环之外,并且还使用了:
activos.remove(Integer.valueOf(idTag));
代替:
activos.remove(idTag);
答案 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)。因此,第二个重载方法将被调用。