26

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

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

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

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

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

4

5 回答 5

14

没有预先烘焙的选项。有两种现成的选择,但都不是很好:

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

}

这是即兴的,因此其中可能存在一个微妙的错误,并且可以肯定这不是线程安全的或任何东西。您的需求可能会有所不同,并导致您采用一种方法而不是另一种方法。

于 2012-12-24T17:19:41.473 回答
9

使用,您可以获得连续StreamLinkedHashSet,跳过前 n-1 个元素并获得最后一个。

Integer lastInteger = set.stream().skip(s.size()-1).findFirst().get();
于 2014-05-24T09:32:10.240 回答
3

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

set.toArray()[ set.size()-1 ] // returns the last element.
于 2012-12-24T17:22:33.283 回答
-1

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

LinkedHashSetEx.java

请享用...

于 2015-06-21T20:52:02.277 回答
-5

集合与顺序无关。我们不能按索引访问元素。如果您需要最后一个元素,

1) 创建新的 ArrayList(Set)

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

于 2012-12-24T17:19:22.370 回答