为什么这会返回ArrayIndexOutOfBounds异常?

时间:2018-04-13 06:04:35

标签: java list

我在java中有一个列表,

List<CP> cp=cpp.getCP();

getCP方法返回CP(List<CP>

的列表

我正在尝试获取CP并修改它,然后将其添加回来。

for(CP c:cp) {
    int index=cp.indexOf(c);
    c.setM_midRate(value);
    cp.set(index,c);
}
cpp.setCP(cp);

但是set()给出了一个ArrayIndexOutOfBoundsException。这是为什么?我设置在同一个位置

1 个答案:

答案 0 :(得分:0)

此代码有一些偷偷摸摸的问题。

您使用增强型for循环来迭代元素。然后使用indexOf。以这种方式搜索列表将花费很长时间,因为每个元素都在寻找自己。您想使用不同类型的循环。让我向您介绍列表迭代器。

ListIterator<CP> iterator = cp.listIterator;
while(iterator.hasNext())
//...

WAIT!这根本不是必需的。你看,每次你在循环中得到一个新的cp对象,你实际上得到了引用。因此,当您调用setM_midRate时,它会更新对象的相同实例。无需查找索引或将对象放回列表中。所以......

for(CP c:cp) {
    c.setM_midRate(value);
}
cpp.setCP(cp);