我正在尝试对链接列表类进行迭代(或对每个循环使用一个),并且能够将项目(找到时)更改为传入的参数。
for(Item n : items)
{
if (n.getKey().equals(key))
{
n = new Item(key, value);
}
}
此数据更改是否有效或是暂时的(仅在删除激活记录时丢失)?
答案 0 :(得分:0)
您正在使用快速枚举,它可以保护您正在迭代的列表。如果您想更改列表中的数据,则需要使用传统的for循环。
基本上枚举的速度有多快,它使得数组在代码块中是只读的,因为你无法访问迭代的整数。
你可以这样做:
for(int i = 0; i < items.length; i++)
{
if (n.getKey().equals(key))
{
items[i] = new Item(key, value);
}
}
答案 1 :(得分:0)
您无法迭代集合并对其进行修改。您将始终获得java.util.ConcurrentModificationException
。首先,您需要使用迭代器来删除项目。然后,您可以使用第二个列表来存储要添加的数据。
这是一个例子:
LinkedList<String> linkedList = new LinkedList<String>();
linkedList.add("This");
linkedList.add("is");
linkedList.add("an");
linkedList.add("test");
LinkedList<String> temp = new LinkedList<String>();
for (Iterator<String> iterator = linkedList.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
if(string.equals("an")) {
iterator.remove();
temp.add("a");
}
}
linkedList.addAll(temp);
您可以致电iterator.remove()
以保存从列表中删除当前项目。
答案 2 :(得分:0)
检查iterator.Iterator的语法有两个方法hasnext和next。