Это для упорядоченных коллекций, например, java.util.List. Почему разработчики языка не включили последний метод? Единственные причины, которые я могу придумать:
- неоднозначность, когда коллекция пуста (вернуть ноль или сгенерировать исключение)
- API раздувать
Любые другие причины?
java
api-design
три чашки
источник
источник
collection.get(collection.size() - 1)
.Ответы:
Раздувание API, вероятно, ответ. Исходя из моего опыта, единственное время, когда мне понадобились эти функции, очередь или стек, была правильная структура данных для работы с соответствующим методом.
источник
get(-1)
извлечение из конца списка, она делала бы то, что хотел OP, не добавляя раздувание API. Мой ответ как таковой вызвал необъяснимые отрицательные голоса.last()
метод столь же легко , какlist.get(list.size()-1)
, точно так же как не существуетfirst()
способ илиfifth()
метод. Это не так сложно синтезировать и это специализация. Вы также можетеreverse()
список иlist.get(0)
который дастlast
элемент. Вещи, которые легко сделать, обычно не имеют собственных специализированных методов.приводит к следующему выводу
также самонадеянно предполагать, что все, что реализует
List
интерфейс, на самом деле имеет понятиеlast()
чего-либо.источник
.size()
вернет текущий размер,.size()-1
все равно будет последним элементом независимо от того, как он узнает, был ли он полностью заполнен или нет?.size()-1
это не идеальный способ реализацииlast()
(хотя такой большой список маловероятен, и мне интересно, как такой список реализовал быtoArray()
...)java.util.LinkedList
ОпределяетgetLast()
иgetFirst()
методы. К сожалению, эти методы не определены ни в одном из его интерфейсов, поэтому вы должны использовать тип LinkedList. Если вас интересует только последний элемент, вы можете использовать методjava.util.Queue
интерфейсаpeek()
. LinkedList реализует очередь.источник
В основном вы должны либо задать для
size()
дляfor
-loop или итерация его, прося его итератора и использовать его в то время или делать-цикл. Используйте тот, который подходит для ваших целей.В данной точке итератор знает, есть ли еще записи, и позволяет получить следующую, если она есть. Вы потом повторяете пока "больше записей?" выходит из строя.
См. Раздел «Обход коллекций» по адресу http://download.oracle.com/javase/tutorial/collections/interfaces/collection.html.
источник