1

例えば

私はキューを持っています

void someMethod() {

     history.add(new Sample(time, data));
     ...
     traverse(history);
}

void traverse(Queue<Sample> history) {
     for(int i=0; i<history.size(); i=i+10) {
         history.get(i)...  // ???
     }
}

class Sample {
  long time;
  double data;
}

懸念事項は、

  1. を呼び出してこのキューを破棄したくありませんtraverse()
  2. ここで言う、特定のステップでキューをトラバースします10

シンプルで素敵な解決策はありますか?

4

4 に答える 4

9
for (Sample s : history)
    doStuff(s);

これは拡張 for ループと呼ばれます。詳細については、こちらをご覧ください。

于 2013-05-07T23:44:50.387 に答える
8

Queueを実装Iterableしているため、単純なループがそれをトラバースします。

for (Sample sample : history)

AnIteratorはそれを行う別の方法であり、より詳細に制御できます (必要に応じて破棄できます) が、より冗長です。

于 2013-05-07T23:45:16.670 に答える
-1
LinkedList<Sample> h = (LinkedList<Sample>) history;
for(int i=0; i < h.size(); i+=step) {
    h.get(i).memory ...
}

私はこのアプローチに気付いたばかりで、まだ試していません。

nullptrが指摘したように、上記のコードの条件は、がQueueとして実装されていることLinkedListです。(これは私の場合ですQueue<Sample> history = new LinkedList<Sample>();:)

于 2013-05-08T00:11:21.437 に答える