2 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
重新得到一個(gè)新的 Iterator 對(duì)象(還是調(diào)用 coll.iterator())。所謂遍歷嘛,你已經(jīng)“遍”過(guò),下次再“遍”當(dāng)然要重新開(kāi)始了。
如果你的集合中都沒(méi)東西,你當(dāng)然就沒(méi)有“遍”的必要,當(dāng)然是我們往集合中添加了東西我們才要遍歷一下看一下其中的東西嘛。不過(guò)有一點(diǎn),在迭代的過(guò)程中不能直接修改集合。比如:
for(Iterator iter = list.iterator(); iter.hasNext(); ) {
list.add("afewfe"); // 這個(gè)操作是非法的,它導(dǎo)致 iter 內(nèi)緩存的位置索引失效,結(jié)果不可預(yù)料。
}
Java 中的迭代器是指你想對(duì)集合中的每一個(gè)元素做個(gè)操作,這個(gè)時(shí)候就不能再在不通知迭代器的情況下直接改這個(gè)集合了,通常我們?yōu)榱舜_保迭代器在迭代過(guò)程中的位置索引是有一致的,我們支持的修改操作很有限,比如:
for(Iterator iter = list.iterator(); iter.hasNext(); ) {
Object current = iter.next();
// 如果是我們想找的,刪除它。
if ( current == aaa) {
iter.remove(); // 刪除當(dāng)前的。這個(gè)時(shí)候迭代器知道我們修改了集合,而且我們只能刪除當(dāng)前位置的東西,這個(gè)迭代器內(nèi)部的位置索引就沒(méi)有問(wèn)題,如果我們刪除任意位置的元素,那么迭代器當(dāng)前保持的位置索引就沒(méi)有意義,因此不能直接 add 或 remove 任意位置,只能通過(guò)迭代器來(lái)刪除當(dāng)前位置的。
}
}
for(ListIterator iter = list.listIterator(); iter.hasNext(); ) {
// 這個(gè) ListIterator 比 Iterator 多些方法可用,因?yàn)?List 與其它集合相對(duì)它是有序的。
}

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
關(guān)于iterator的Next()遍歷完之后怎么回到起點(diǎn),你可以重新it=coll.iterator(),就可以回到起點(diǎn)。
- 2 回答
- 0 關(guān)注
- 2061 瀏覽
添加回答
舉報(bào)