我在我的android应用程序中使用增强for循环来遍历状态对象列表。
for (Status stat : status)
timelineItems.add(new TimelineItem(stat));
这会生成以下IndexOutOfBoundsException: java.lang.IndexOutOfBoundsException:索引0无效,大小为0
我意识到发生这种情况是因为ArrayList的大小为0,这意味着它是空的。我的问题是为什么它首先进入循环并不是为了保证不会发生这些问题而创建的增强版以及如何阻止它。
答案 0 :(得分:3)
首先,如果您使用ArrayList
,请在Android上使用Don't use enhanced for loop。它比常规速度慢并且使用更多内存。对于所有其他系列,没关系。
您遇到的可能与集合的非同步修改有关。如果在循环运行时大小突然改变,则会导致错误。
答案 1 :(得分:2)
这种情况发生的唯一方法是,如果其他人(另一个线程)在增强的for循环执行时清除了集合。它确定存在第0个元素,但是当它访问它时它已被删除。