您可以在不使用索引的情况下处理列表中的连续值对。这是一种方法:
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>
是一个具有多个实现的接口。ArrayList<T>
在恒定时间内执行.get(index)
,但对 a 的相同调用LinkedList<T>
需要与 的值成比例的时间index
。所以可能会有一个真正的性能考虑。
上面的processWordsInSentence
实现必须明确处理少于两个元素的列表的情况。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);
}
}
}