Вызов iterator.next() через TreeSet [пример из Thinking In Java]
Глава "Чтение контейнеров в глубину" из книги "Размышление на Java". Видел этот пример (модифицированный из SortedMapDemo.java):
TreeSet<String> sortedSet = new TreeSet<String>();
Collections.addAll(sortedSet,
"a b c d e f g h"
.split(" "));
...
Iterator<String> it = sortedSet.iterator();
for(int i = 0; i <= 6; i++) {
if(i == 3) low = it.next();
if(i == 6) high = it.next();
else it.next();
}
print(low);
print(high); //overridden
Что меня сбивает с толку, так это то, что в то время как "low" печатает "d", "high" печатает "h", для которого, я думаю, вместо этого следует "g".
Если мы вызываем it.next() в каждой итерации, разве седьмая итерация не должна давать "g"??
1 ответ
Решение
У вас есть if
с последующим if/else
, Таким образом, итерация происходит дважды, когда i == 3
, Вот ваш оригинальный код, переписанный с фигурными скобками и пробелами для ясности:
if (i == 3) {
low = it.next();
}
if (i == 6) {
high = it.next();
} else {
it.next();
}
Это даст вам ожидаемые результаты:
if(i == 3) low = it.next();
else if(i == 6) high = it.next();
else it.next();