当我反向遍历ArrayList时,我得到了IndexOutOfBoundsException。我尝试进行正向迭代,没有问题。我期望并知道列表中包含五个元素。代码如下:
Collection rtns = absRtnMap.values(); List list = new ArrayList(rtns); Collections.sort(list); for(int j=list.size();j>0;j=j-1){ System.out.println(list.get(j)); }
正向迭代-工作正常,但对我没有用:
for(int j=0;j<list.size();j++){ System.out.println(list.isEmpty()); System.out.println(list.get(j)); } // this worked fine
错误:
Exception in thread "Timer-0" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 at java.util.ArrayList.RangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at model.Return.getReturnMap(Return.java:61) at controller.Poller$1.run(Poller.java:29) at java.util.TimerThread.mainLoop(Unknown Source) at java.util.TimerThread.run(Unknown Source)
另外,如果有人知道反向迭代更好的习惯用法,我很乐意尝试一下。
list.size() - 1由于数组(或ArrayList)元素的编号从0到小于列表大小的1进行编号,因此开始迭代。这是一个相当标准的习惯用法:
list.size() - 1
ArrayList
for (int j = list.size() - 1; j >= 0; j--) { // whatever }
请注意,您的前向迭代有效,因为它 在 到达 之前 就停止了list.size()。
list.size()