3

有没有办法像我们对数组一样对 Java 集合中的 TreeSet 进行大小限制?例如在我们做的数组中,

anArray = new int[10];
4

6 回答 6

5

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

当您向其中添加元素时, ATreeSet会自动增长。你不能设置它的大小。你只能阅读它。

于 2012-07-25T21:28:47.097 回答
3

这个威胁可以帮助你在 Java 中修复大小列表

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

于 2012-07-25T21:29:20.843 回答
2

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

于 2012-07-25T21:29:37.287 回答
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);
    }
}
于 2012-07-25T21:32:47.957 回答
2

这是BoundedTreeSetApache Solr 中的一个实现,它在尝试插入“完整”集合时保持最大值:

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

Maven 工件可在此处获得:

<dependency>
   <groupId>org.apache.solr</groupId>
   <artifactId>solr-core</artifactId>
   <version>4.6.0</version>
</dependency>
于 2013-11-28T17:38:34.300 回答
0

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

于 2012-07-25T22:09:46.177 回答