将大小设置为TreeSet

时间:2012-07-25 21:25:57

标签: java

有没有办法在Java Collections中为TreeSet提供大小限制,就像我们对数组一样? 例如,在我们做的数组中,

anArray = new int[10];

6 个答案:

答案 0 :(得分:5)

数组具有固定长度,必须在创建时指定。

当您向其中添加元素时,TreeSet会自动增长。您无法设置其大小。你只能读它。

答案 1 :(得分:3)

此威胁可以帮助您fixed size list in Java

此外,您可以实现自己的集合,以便在未达到限制时添加元素

答案 2 :(得分:2)

您始终可以自行实施。这是一个让你入门的例子;您可能会发现您希望相应调整它:

public class BoundedTreeSet<E> extends TreeSet<E> {

    private final int limit;

    public BoundedTreeSet(final int limit) {
        super();
        this.limit = limit;
    }

    public BoundedTreeSet(final int limit, final Collection<? extends E> c) {
        super(c);
        this.limit = limit;
    }

    public BoundedTreeSet(final int limit, final Comparator<? super E> comparator) {
        super(comparator);
        this.limit = limit;
    }

    public BoundedTreeSet(final int limit, final SortedSet<E> s) {
        super(s);
        this.limit = limit;
    }

    @Override
    public boolean add(final E e) {
        if (size() >= limit) {
            return false;
        }

        return super.add(e);
    }

    @Override
    public boolean addAll(Collection<? extends E> c) {
        if (size() + c.size() >= limit) {
            return false;
        }

        return super.addAll(c);
    }
}

答案 3 :(得分:2)

以下是Apache Solr中BoundedTreeSet的实现,它在尝试插入“完整”集时保留最大值:

http://lucene.apache.org/solr/4_6_0/solr-core/org/apache/solr/util/BoundedTreeSet.html

Maven artifact here:

<dependency>
   <groupId>org.apache.solr</groupId>
   <artifactId>solr-core</artifactId>
   <version>4.6.0</version>
</dependency>

答案 4 :(得分:1)

TreeSet的构造函数都没有指定初始大小,它在添加元素时会增长。并且无法限制数据结构的最大大小。每次添加()一个新元素时,您都需要手动检查它是否超出了允许的最大大小。您可以通过实现从TreeSet扩展并覆盖add(),addAll()以及接收Collection作为参数的两个构造函数的子类来指定此行为。

答案 5 :(得分:0)

您最接近具有容量限制的现有集合的是BlockingQueue。将项添加到队列时,可以指定零秒(或非常小)的阻塞超时,以便在超出容量时抛出异常。有关详细信息,请参阅BlockingQueue.offer()