Вызов 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();
Другие вопросы по тегам