簡體   English   中英

在一個 ArrayList 中使用兩個迭代器

[英]using two iterators in one ArrayList

編輯:感謝您的所有及時回復。 現在我看到任務不會工作。 從另一個線程我讀到 Java 中的迭代器比 C++ 中的迭代器強大得多。 那請問為什么在Java中使用迭代器? 只是為了替換“for”循環? 謝謝。

一些注意事項:

  • 第二個迭代器應該從第一個迭代器之前的 position 開始。
  • 我嘗試通過從頭開始的有序列表開始 go,在列表中找到一些對象,這些對象與 aItr 指向的對象具有相似的屬性。

我不介意使用兩個“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM