将设置大小设置为TreeSet
答
最接近你可以来一个现有的具有容量限制的集合是一个BlockingQueue。将项目添加到队列时,可以指定零秒(或非常小)的阻塞超时,以便在超过容量时引发异常。有关详细信息,请参阅BlockingQueue.offer()
答
阵列具有在创建时,必须指定一个固定的长度。
一个TreeSet
作为添加元素时,它会自动增长。您无法设置其大小。你只能阅读它。
答
TreeSet中的构造函数中没有指定的初始大小,它生长时元素被添加。而且无法限制数据结构的最大大小。每次添加()一个新元素时,都需要手动检查它是否超出了允许的最大值。您可以通过实现从TreeSet扩展的子类来指定此行为,并重写add(),addAll()以及接收Collection作为参数的两个构造函数。
答
您可以随时自行实施。这是一个让你开始的例子。你可能会发现你希望相应地调整它:
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);
}
}
答
这里是BoundedTreeSet
在Apache 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>
你是什么意思一个“大小限制” 你能给我们部分代码吗? – 2012-07-25 21:27:52
不 - 你可能要检查这个[FixedSizeSortedSet(http://www.java2s.com/Code/Java/Collections-Data-Structure/FixedSizeSortedSet.htm) - 不能保证它是免费的错误...其实它不覆盖这样的addAll可能无法按预期工作... – assylias 2012-07-25 21:31:56