我想存储一个数字列表 1,2,3,4 - (让我们从 开始List<Integer>
)
我想确保数字是唯一的(好的,好的,Set<Integer>
)
我想保证订单(好的...... LinkedHashSet<Integer>
)
我想从列表中获取最后一个元素..
将最后一个数字插入LinkedHashSet<Integer>
请的最简单方法是什么?
我想存储一个数字列表 1,2,3,4 - (让我们从 开始List<Integer>
)
我想确保数字是唯一的(好的,好的,Set<Integer>
)
我想保证订单(好的...... LinkedHashSet<Integer>
)
我想从列表中获取最后一个元素..
将最后一个数字插入LinkedHashSet<Integer>
请的最简单方法是什么?
没有预先烘焙的选项。有两种现成的选择,但都不是很好:
Order n 方法:
public <E> E getLast(Collection<E> c) {
E last = null;
for(E e : c) last = e;
return last;
}
呸!但也有一个 Order 1 方法:
class CachedLinkedHashSet<E> extends LinkedHashSet<E> {
private E last = null;
@Override
public boolean add(E e) {
last = e;
return super.add(e);
}
public E getLast() {
return last;
}
}
这是即兴的,因此其中可能存在一个微妙的错误,并且可以肯定这不是线程安全的或任何东西。您的需求可能会有所不同,并导致您采用一种方法而不是另一种方法。
使用java-8,您可以获得连续Stream
的LinkedHashSet
,跳过前 n-1 个元素并获得最后一个。
Integer lastInteger = set.stream().skip(s.size()-1).findFirst().get();
首先,我同意 corsiKa 的解决方案,它建议扩展版本的LinkedHashSet
类,其中包含指向最后一个元素的指针。但是,您可以通过为数组消耗一些空间来使用传统方式:
set.toArray()[ set.size()-1 ] // returns the last element.
集合与顺序无关。我们不能按索引访问元素。如果您需要最后一个元素,
1) 创建新的 ArrayList(Set)
可以轻松访问 arrayList 的最后一个元素