我想迭代(或使用每個循環)在鏈接列表類,並能夠更改項目(找到時)爲傳入參數。更改列表,同時迭代或使用每個循環
for(Item n : items)
{
if (n.getKey().equals(key))
{
n = new Item(key, value);
}
}
數據的這種改變是工作還是臨時的(只有當激活記錄被刪除時纔會丟失)?
我想迭代(或使用每個循環)在鏈接列表類,並能夠更改項目(找到時)爲傳入參數。更改列表,同時迭代或使用每個循環
for(Item n : items)
{
if (n.getKey().equals(key))
{
n = new Item(key, value);
}
}
數據的這種改變是工作還是臨時的(只有當激活記錄被刪除時纔會丟失)?
無法遍歷集合,並對其進行修改。你將永遠得到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()
到savely從列表中刪除當前項目。
不會拋出異常嗎?還是迭代器死了,循環終止? – jfre9193
不會有任何事情發生,它的工作原理完美無瑕;) - 這將取代「a」作爲「a」 – Marcinek
不能保證你會得到'ConcurrentModificationException'。從它的JavaDocs「請注意,無法保證故障快速行爲,因爲一般來說,不可能在存在非同步併發修改的情況下做出任何硬性保證,故障快速操作會盡最大努力拋出ConcurrentModificationException,因此它編寫依賴於此異常的程序的正確性會導致錯誤:ConcurrentModificationException應僅用於檢測錯誤。「 –
您正在使用快速枚舉,它保護您正在迭代的列表。如果您想更改列表中的數據,則需要使用傳統的for循環。
基本上枚舉的工作原理是它使數組在代碼塊中只讀,因爲您無法訪問迭代的整數。
你可以這樣做:
for(int i = 0; i < items.length; i++)
{
if (n.getKey().equals(key))
{
items[i] = new Item(key, value);
}
}
檢查iterator.Iterator的語法有兩個方法hasnext和next。
嘗試使用基本的for循環'for(int i = 0; i
有列表不保證線性時間,迭代器保證 – jfre9193