[英]using two iterators in one ArrayList
編輯:感謝您的所有及時回復。 現在我看到任務不會工作。 從另一個線程我讀到 Java 中的迭代器比 C++ 中的迭代器強大得多。 那請問為什么在Java中使用迭代器? 只是為了替換“for”循環? 謝謝。
一些注意事項:
我不介意使用兩個“for”循環,但我知道 Java 對所有這些庫都非常強大。 我只是好奇是否有比兩個“for”循環更好的方法。 謝謝。
你好,
我一直在使用 C++ 但我是 Java 的新手,所以請多多包涵。 我嘗試使用兩個迭代器循環通過 ArrayList。 第一個迭代器遍歷列表,第二個迭代器從第一個迭代器指向的 position 開始,一直到列表的末尾。 以下代碼是我想要做的(雖然可能無效):
.......; //initialize aList here ......
Iterator aItr = aList.iterator();
while(aItr.hasNext()){
int a = aItr.next();
Iterator bItr = aItr; //-----> is it valid? Any bad consequence?
while (bItr.hasNext()){
............; //do stuff
}
}
將一個迭代器分配給另一個迭代器是否有效? 如果不是,那么做我想做的最好的方法是什么? 謝謝你。
我知道它在 C++ 中有效,但不確定 Java,我搜索了很多,但所有結果都使用迭代器來打印一些東西。 非常感謝您的幫助。
你不應該這樣做:
Iterator bIter = aIter;
因為Java中沒有拷貝構造函數等; bIter 將是對相同底層迭代器的引用。
您可以這樣使用 ListIterator:
ListIterator aItr = aList.listIterator();
while (aItr.hasNext()) {
int a = aItr.next();
ListIterator bItr = aList.listIterator(aItr.previousIndex());
while (bItr.hasNext()) {
// ...
}
}
但是如果你認為 ListIterator 應該有一個 copy() 方法或類似的東西,我同意你的看法......
如果您想要列表中 position n 處的第二個列表迭代器,請使用List#listIterator(int index) :
ListIterator bIter = list.listIterator(n);
由於您似乎正在使用列表,因此在您的情況下最簡單的解決方案是使用兩個索引,如下所示:
for (int i = 0; i < aList.size(); i++) {
for (int j = i; j < aList.size(); j++) {
// do stuff with aList's elements
aList.get(j);
}
}
使用迭代器,您可以實現類似的事情,但是您必須為內部循環構造新的迭代器,可能來自
aList.subList(i, aList.size()).iterator();
它是有效的,但它不會做你想做的事。 您仍然只有一個迭代器,並且外部循環將在內部循環第一次終止后終止。
Java 迭代器無法有意義地復制。 您必須使用一個簡單的 for 循環來增加索引。
做這個:
ArrayList<String> aList = new ArrayList<String>();
// do something to fill the list
for (int i = 0; i < aList.size(); i++)
{
ArrayList<String> bList = aList.subList(i, aList.size());
for (int j = 0; j < bList.size(); j++)
{
// do stuff with the sublist
}
}
重要的是要注意 bList 由 aList 支持,因此對 bList 的更改將反映在 aList 中……進行非結構性更改只是為了保持理智。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.