2 回答

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

TA貢獻1757條經(jīng)驗 獲得超8個贊
關(guān)于iterator的Next()遍歷完之后怎么回到起點,你可以重新it=coll.iterator(),就可以回到起點。
最后的問題,一般不會出錯,這個順序沒有關(guān)系的。
- 2 回答
- 0 關(guān)注
- 1014 瀏覽
添加回答
舉報