You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向ArrayList集合添加元素时触发IndexOutOfBoundsException异常求助

ArrayList插入元素时IndexOutOfBoundsException问题排查

问题原因

你调用的indixlist.add(berth_idx, agent.shipindex)是ArrayList的指定索引插入方法,这个方法要求传入的索引必须满足 0 ≤ index ≤ 当前集合size。当你的集合size为2、berth_idx为3时,3>2,违反了该约束,因此触发IndexOutOfBoundsException。

你混淆了ArrayList的两种扩容逻辑:

  • 不带索引的add(E e)方法会在集合末尾添加元素,当容量不足时自动扩容;
  • 带索引的add(int index, E element)仅负责在指定位置插入元素,不会自动填充索引与当前size之间的空位,也不会因为索引超出size而自动扩容。

解决方案

根据你跟踪泊位占用状态的业务需求,推荐以下两种处理方式:

方式一:填充空位后设置指定索引的值

如果需要直接将船舶索引对应到泊位索引的位置(中间空位用默认值标记未占用),先将集合扩容到目标索引+1的大小,再用set方法替换对应位置的值:

berth_idx = permNAtt.size()-1;
// 填充空位,确保集合大小足够容纳目标索引
while(indixlist.size() <= berth_idx){
    indixlist.add(-1); // 用-1表示泊位未被占用,可根据实际业务调整默认值
}
// 替换指定泊位索引的船舶编号
indixlist.set(berth_idx, agent.shipindex);

方式二:直接添加到集合末尾(无需指定索引)

如果不需要严格对应泊位索引与集合索引的位置关系,仅需记录已占用泊位对应的船舶,直接使用无参add方法:

indixlist.add(agent.shipindex);

内容的提问来源于stack exchange,提问作者Green Madam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:40:15