Подтвердить что ты не робот

Java получает последний элемент коллекции

У меня есть коллекция, я хочу получить последний элемент коллекции. Какой самый быстрый и быстрый способ сделать это?

Одно из решений - сначала toArray(), а затем возвращает последний элемент массива. Есть ли другие лучшие?

4b9b3361

Ответ 1

Это не очень эффективное решение, но работающее:

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;
    }

Ответ 2

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;
}

Ответ 3

Iterables.getLast от Google Guava. Он имеет некоторую оптимизацию для List и SortedSet тоже.

Ответ 4

Ну, одно решение может быть:

list.get(list.size()-1)

Изменить: вам нужно преобразовать коллекцию в список, прежде чем, возможно, вот так: new ArrayList (coll)

Ответ 5

Разумным решением было бы использовать итератор, если вы ничего не знаете о базовой коллекции, но знаете, что есть "последний" элемент. Это не всегда так, не все заказы упорядочены.

Object lastElement = null;

for (Iterator collectionItr = c.iterator(); collectionItr.hasNext(); ) {
  lastElement = collectionItr.next();
}

Ответ 6

В интерфейсе Collection нет метода last() или first(). Для получения последнего метода вы можете либо сделать get(size() - 1) в списке, либо отменить список и сделать get(0). Я не вижу необходимости иметь метод last() в любом API коллекции, если вы не имеете дело с Stacks или Queues

Ответ 7

Или вы можете использовать цикл for-each:

Collection<X> items = ...;
X last = null;
for (X x : items) last = x;