java - 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。我不知道错误在哪里。
先感谢您!
解决方案:
正如他们在评论部分告诉我的那样,我将 ArrayList 的创建移到了for循环之外,并且还使用了:
activos.remove(Integer.valueOf(idTag));
代替:
activos.remove(idTag);
解决方案
ArrayList 类有 2 个要删除的重载方法。一个带有整数参数,用于删除该索引处的项目,另一个带有 Object 参数。Java 中的重载解决方案总是在不考虑装箱和拆箱的情况下开始。因此它优先考虑 remove(int) 重载。应该将索引传递给 Arraylist 的 remove 方法。尝试用
activos.remove(0); 或 activos.remove(new Integer(255)); 迭代元素时不建议使用 ArrayList.remove()
推荐阅读
- python - 使用 odeint 输出值
- python - 从 Wagtail 2.7.1 迁移到 2.7.4 的问题
- reactjs - 在 reactjs 中,是否可以创建一个不重置内容状态的选项卡控件?
- angular - 使用 mat-* 元素时如何使用可扩展行示例修复此材料表
- python - 使用 Python 和 dotenv 更改保存在 .env 文件中的环境变量
- python-3.x - 获取一组列的当前值和下一个值(在每个组中)
- c# - 找不到 .NET Core 项目
- powershell - 通过确认按钮提取组合框文本
- python - 如何 JSON 序列化 Python 类对象?
- r - 在 JSON 生成的嵌套数据框中取消嵌套列