获取LinkedHashSet的最后一个

时间:2012-12-24 17:13:57

标签: java

我想存储一个数字列表1,2,3,4 - (让我们从List<Integer>开始)

我想确保数字是唯一的(好的,好的,Set<Integer>

我想保证订单(ok ... LinkedHashSet<Integer>

我想从列表中获取最后一个元素..

将最后一个数字插入LinkedHashSet<Integer>的最简单方法是什么?

5 个答案:

答案 0 :(得分:10)

此处没有预先烘焙的选项。有两种袖口选择,两种都不好:

订单方法:

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;
        return super.add(e);
    }
    public E getLast() {
        return last;
    }

}

这是关闭袖口,所以可能有一个微妙的错误,并确保这不是线程安全或任何东西。您的需求可能会有所不同,并导致您采用一种方法而不是另一种方法。

答案 1 :(得分:5)

使用,您可以获得Stream的顺序LinkedHashSet,跳过前n-1个元素并获取最后一个元素。

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

答案 2 :(得分:2)

首先,我同意corsiKa的解决方案,它提出了LinkedHashSet类的扩展版本,其中包含指向最后一个元素的指针。但是,您可以通过为数组占用一些空间来使用传统方法:

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

答案 3 :(得分:0)

这是一个添加方法来访问最后一个条目O(1)的实现:

LinkedHashSetEx.java

...享受

答案 4 :(得分:-3)

集合与order.in无法按索引访问元素。如果你需要最后一个元素,

1)创建新的ArrayList(Set)

可以轻松访问arrayList的最后一个元素