索引超出ArrayList子列表的范围

时间:2015-05-21 21:19:10

标签: java arraylist

我有一个11,000个对象的ArrayList,我想使用ArrayList.subList()一次处理200个。当我把它放在for循环中时,我得到索引超出范围。如何最好地控制偏移?

for(int i = 0; i< aList.size(); i+=200){
   process(aList(i,i+200));
}

3 个答案:

答案 0 :(得分:6)

您可以获得最低List.size()和计数器i + 200

for (int i = 0; i < aList.size(); i += 200) {
    int min = Math.min(aList.size(), i + 200);
    process(aList.subList(i, min));
}

对于11000个对象的情况,最后一次迭代将从10800到10999获得子列表。

这也将考虑列表大小不是200的倍数的情况。

答案 1 :(得分:0)

假设您的ArrayList大小正好是11000:

for(int i = 200; i< aList.size(); i+=200){
   process(aList(i-200,i-1));  //0 to 199, 200 - 399......  (0 - 10999 = 11000)
}

答案 2 :(得分:0)

你在索引上遇到越界错误的原因是i到i + 200实际上是在处理201个项目。例如,0到200是201项。将您的process(aList(i,i+200));更改为process(aList(i,i+199));导致错误的原因是最后一个循环引用的是超过最后一个项目的1个项目。它引用索引11,001。