当前位置: 首页 > 面试题库 >

通过ArrayList进行反向迭代会产生IndexOutOfBoundsException

澹台鸿熙
2023-03-14
问题内容

当我反向遍历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进行编号,因此开始迭代。这是一个相当标准的习惯用法:

for (int j = list.size() - 1; j >= 0; j--) {
    // whatever
}

请注意,您的前向迭代有效,因为它 到达 之前 就停止了list.size()



 类似资料:
  • 问题内容: 有没有办法遍历Java SparseArray(适用于Android)?我曾经很容易通过索引来获取值。我找不到一个。 问题答案: 似乎我找到了解决方案。我没有正确注意到该功能。 因此,我将使用以下内容:

  • 问题 你想反方向迭代一个序列 解决方案 使用内置的 reversed() 函数,比如: >>> a = [1, 2, 3, 4] >>> for x in reversed(a): ... print(x) ... 4 3 2 1 反向迭代仅仅当对象的大小可预先确定或者对象实现了 __reversed__() 的特殊方法时才能生效。 如果两者都不符合,那你必须先将对象转换为一个列表才行,比

  • 问题内容: 我有一个这样的对象: 我需要在HTML表中获取ID和名称,但是似乎很难遍历此对象。TIA。我知道我需要先到达“值数组”,然后再到达“组”对象,但是我要遍历对象和数组之间的过渡以及foreach与基于索引的迭代。 例如,我尝试了这个: 它遍历对象,但也给我没用 问题答案:

  • 我试图遍历一个JList,其中每个项目都包含:JGroup-JLabel 目前我拥有的是: 我得到的结果是: Item=javax。摆动JPanel[,0,0,0x0,无效,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=

  • 环境 OS:Redhat 7 ReverseProxy:Apache(仅限) 通过:Docker 部署 ====================================================================================================================== 问题: 是否可以在Apache反向代理中进行更改,以便通过

  • 问题内容: 我有一个像这样的ArrayList对象: 如何遍历列表?我想在TextView中显示值,该值来自ArrayList对象的数据。 问题答案: 最简单的方法是遍历的所有s ,然后遍历的所有键: