迭代或使用for循环时更改列表

时间:2014-04-25 00:15:38

标签: java iterator

我正在尝试对链接列表类进行迭代(或对每个循环使用一个),并且能够将项目(找到时)更改为传入的参数。

for(Item n : items) 
{
    if (n.getKey().equals(key))
    {
         n = new Item(key, value);
    }
}

此数据更改是否有效或是暂时的(仅在删除激活记录时丢失)?

3 个答案:

答案 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。