インデックスを使用せずに、リストから値の連続するペアを処理できます。1 つの方法を次に示します。
private void processWordsInSentence(List<String> sentence) {
Iterator<String> it = sentence.iterator();
if (it.hasNext()) {
String previous = it.next();
while(it.hasNext()) {
String current = it.next();
// use previous and current values, e.g.
System.out.println(previous + " " + current);
previous = current;
}
}
}
の代わりにこのようなものを使用したいのはなぜsentence.get(index)
ですか? 私はいくつかの理由を提供します:
あなたのサンプルでは、処理はリストからの連続した値に関係しており、それらの位置ではありません。したがって、インデックスを明示的にいじる必要があることに「付加価値」はありません。
List<T>
これは、複数の実装を持つインターフェイスであることを忘れないでください。は一定時間で実行されますが、同じ a の呼び出しにArrayList<T>
はの値に比例する時間が必要です。したがって、実際のパフォーマンスに関する考慮事項がある可能性があります。.get(index)
LinkedList<T>
index
上記のprocessWordsInSentence
実装では、要素が 2 つ未満のリストの場合を明示的に処理する必要があります。ガーディング内のループif
はステートメントで記述できfor
、トラバーサルを実際のデータの処理から分離することができます (そのスタイルを好む場合)。
private void processWordsInSentence(List<String> sentence) {
Iterator<String> it = sentence.iterator();
if (it.hasNext()) {
for (
String previous = it.next(), current = null;
it.hasNext();
previous = current
) {
// use previous and current values, e.g.
System.out.println(previous + " " + current);
}
}
}