Вы не можете получить доступ к переменной итератора foreach
вне цикла, поскольку она выходит из области видимости. Как вы написали, приведенный выше код не компилируется.
Существует множество методов, которые вы можете использовать, например, использование boolean
, которое вы упомянули. Вы также можете использовать « sentinel », фиктивную вкладку, которую вы ставите в конце tabList
, с максимальным приоритетом, который зарезервирован для этой цели (т.е. никакая «настоящая» вкладка не может иметь этот приоритет ). Это гарантирует, что условие if
внутри цикла будет истинным, когда вы перейдете на вкладку часового.
Наконец, вы также можете реализовать свой Tab
как Comparable
или определить для него отдельный Comparator
и сделать tabList
упорядоченной коллекцией. Таким образом, вам даже не нужен часовой или даже цикл foreach
; Вы можете просто добавить newTab
в отсортированную коллекцию и указать, куда ее вставить. Например, если tabList
- это TreeSet
, вставка будет O(log n)
. Другие методы, упомянутые до сих пор, O(n)
.