かなり大きなプロジェクトに取り組むのは初めてで、最高のパフォーマンスを求められました。
約 5000 の要素を持つリストListIterator
を呼び出す約 180 のループがあるため、for ループを に置き換える必要があります。list.get(i)
そこで、質問が 2 つあります。
1) これらの 2 つのスニペットは同じですか? つまり、それらは同じ出力を生成しますか? いいえの場合、どうすれば修正できますListIterator
か?
ListIterator<Corsa> ridesIterator = rides.listIterator();
while (ridesIterator.hasNext()) {
ridesIterator.next();
Corsa previous = ridesIterator.previous(); //rides.get(i-1)
Corsa current = ridesIterator.next(); //rides.get(i)
if (current.getOP() < d.getFFP() && previous.getOA() > d.getIP() && current.wait(previous) > DP) {
doSomething();
break;
}
}
__
for (int i = 1; i < rides.size(); i++) {
if (rides.get(i).getOP() < d.getFP() && rides.get(i - 1).getOA() > d.getIP() && rides.get(i).getOP() - rides.get(i - 1).getOA() > DP) {
doSomething();
break;
}
}
2) このようなものがある場合、どのように最初のスニペットになりますか? (i とその終了条件を変更)
for (int i = 0; i < rides.size() - 1; i++) {
if (rides.get(i).getOP() < d.getFP() && rides.get(i + 1).getOA() > d.getIP() && rides.get(i).getOP() - rides.get(i + 1).getOA() > DP) {
doSomething();
break;
}
}
を使うのは初めてで、ListIterator
今は試すことができないので質問しています。
編集:私は ArrayList を使用していません。これは、LinkedList に基づくカスタム リストです。
EDIT 2:さらに情報を追加しています。私のデータは反復ごとに変化し、一貫性のないデータを処理する必要があるため、キャッシュの管理が難しいため、キャッシュシステムを使用できません。このループのいくつかを 1 つの大きなループにマージすることさえできません。さまざまなことを行う必要があるため、さまざまな方法でそれらを取得しているためです。
では、この特定のケースに固執すると、最善の方法は何だと思いますか? ListIterator は私のケースに対処するための最良の方法ですか? for ループが 0 と size-1 の間で機能する場合、ListIterator をどのように使用できますか?