Получение последнего из 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
С помощью java-8 вы можете получить последовательный Stream
LinkedHashSet
, пропустить первые n-1 элементы и получить последний.
Integer lastInteger = set.stream().skip(s.size()-1).findFirst().get();
Ответ 4
вот реализация, которая добавляет метод доступа к последней записи O (1):
LinkedHashSetEx.java
наслаждаться...
Ответ 5
Наборы не зависят от порядка. Мы не можем получить доступ к элементу по индексу. Если вам нужен последний элемент,
1) создать новый ArrayList (Set)
К последнему элементу arrayList можно легко получить доступ