У меня есть коллекция, я хочу получить последний элемент коллекции. Какой самый быстрый и быстрый способ сделать это?
Одно из решений - сначала toArray(), а затем возвращает последний элемент массива. Есть ли другие лучшие?
У меня есть коллекция, я хочу получить последний элемент коллекции. Какой самый быстрый и быстрый способ сделать это?
Одно из решений - сначала toArray(), а затем возвращает последний элемент массива. Есть ли другие лучшие?
Это не очень эффективное решение, но работающее:
public static <T> T getFirstElement(final Iterable<T> elements) {
if (elements == null)
return null;
return elements.iterator().next();
}
public static <T> T getLastElement(final Iterable<T> elements) {
final Iterator<T> itr = elements.iterator();
T lastElement = itr.next();
while(itr.hasNext()) {
lastElement=itr.next();
}
return lastElement;
}
A Collection
не обязательно упорядоченный набор элементов, поэтому может не быть понятия "последнего" элемента. Если вы хотите что-то упорядоченное, вы можете использовать SortedSet
, который имеет метод last()
. Или вы можете использовать List
и вызвать mylist.get(mylist.size()-1);
Если вам действительно нужен последний элемент, вы должны использовать List
или SortedSet
. Но если все, что у вас есть, это Collection
, и вам действительно нужен действительно последний элемент, вы можете использовать toArray()
, или вы можете использовать Iterator
и итерации до конца списка.
Например:
public Object getLastElement(final Collection c) {
final Iterator itr = c.iterator();
Object lastElement = itr.next();
while(itr.hasNext()) {
lastElement = itr.next();
}
return lastElement;
}
Iterables.getLast
от Google Guava.
Он имеет некоторую оптимизацию для List
и SortedSet
тоже.
Ну, одно решение может быть:
list.get(list.size()-1)
Изменить: вам нужно преобразовать коллекцию в список, прежде чем, возможно, вот так: new ArrayList (coll)
Разумным решением было бы использовать итератор, если вы ничего не знаете о базовой коллекции, но знаете, что есть "последний" элемент. Это не всегда так, не все заказы упорядочены.
Object lastElement = null;
for (Iterator collectionItr = c.iterator(); collectionItr.hasNext(); ) {
lastElement = collectionItr.next();
}
В интерфейсе Collection нет метода last()
или first()
. Для получения последнего метода вы можете либо сделать get(size() - 1)
в списке, либо отменить список и сделать get(0)
. Я не вижу необходимости иметь метод last()
в любом API коллекции, если вы не имеете дело с Stacks
или Queues
Или вы можете использовать цикл for-each:
Collection<X> items = ...;
X last = null;
for (X x : items) last = x;