Получение последнего из LinkedHashSet

Я хотел бы сохранить список чисел 1,2,3,4 - (позволяет начать с List<Integer>)

Я хотел бы убедиться, что числа уникальны (хорошо, отлично, Set<Integer>)

Я хотел бы гарантировать заказ (ok... LinkedHashSet<Integer>)

Я хотел бы получить последний элемент из списка.

Каким будет самый простой способ получить последнее число, вставленное в LinkedHashSet<Integer> пожалуйста?

Ответы

Ответ 1

Прежде всего, я согласен с решением corsiKa, которое предлагает расширенную версию класса LinkedHashSet, содержащую указатель на последний элемент. Тем не менее, вы можете использовать традиционный способ, потребляя некоторое пространство для массива:

set.toArray()[ set.size()-1 ] // returns the last element.

Ответ 2

Для этого нет предустановленной опции. Там два варианта с манжетой, и ни один из них не хорош:

Приказ n:

public <E> E getLast(Collection<E> c) {
    E last = null;
    for(E e : c) last = e;
    return last;
}

Тьфу! Но есть и порядок 1:

class CachedLinkedHashSet<E> extends LinkedHashSet {
    private E last = null;
    public boolean add(E e) {
        last = e;
        super.add(e);
    }
    public E getLast() {
        return last;
    }

}

Это от манжеты, поэтому в ней может быть тонкая ошибка, и наверняка это не потокобезопасность или что-то еще. Ваши потребности могут различаться и привести вас к одному подходу к другому.

Ответ 3

С помощью вы можете получить последовательный Stream LinkedHashSet, пропустить первые n-1 элементы и получить последний.

Integer lastInteger = set.stream().skip(s.size()-1).findFirst().get();

Ответ 4

вот реализация, которая добавляет метод доступа к последней записи O (1):

LinkedHashSetEx.java

наслаждаться...

Ответ 5

Наборы не зависят от порядка. Мы не можем получить доступ к элементу по индексу. Если вам нужен последний элемент,

1) создать новый ArrayList (Set)

К последнему элементу arrayList можно легко получить доступ