我在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。这是为什么?我设置在同一个位置
答案 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);