使用Comparator类初始化TreeSet时如何设置其最大容量
TreeSet设置最大容量实现方案
JDK 内置的 TreeSet 没有提供直接设置最大容量的构造参数,无论是否传入 Comparator 初始化,都无法直接指定容量上限,你需要通过自定义扩展实现该需求。
实现方式
通过继承 TreeSet 自定义集合类,在元素添加逻辑中增加容量校验,超过阈值时按业务规则淘汰多余元素即可,示例实现代码如下:
import java.util.TreeSet; import java.util.Comparator; public class LimitedTreeSet<T> extends TreeSet<T> { private final int maxCapacity; // 适配传入Comparator的初始化场景 public LimitedTreeSet(int maxCapacity, Comparator<? super T> comparator) { super(comparator); this.maxCapacity = maxCapacity; } @Override public boolean add(T t) { boolean isAdded = super.add(t); // 容量超过阈值时触发淘汰逻辑 if (size() > maxCapacity) { // 默认淘汰排序规则中排位最后的元素,需保留末尾元素则替换为pollFirst()即可 pollLast(); } return isAdded; } // 如需支持批量添加的容量校验,可重写addAll方法,逻辑同add }
适配你的业务场景
你要初始化容量上限为50的subscribers集合,将原有初始化代码替换为以下内容即可:
this.subscribers = new LimitedTreeSet<T>(50, new StructureByNumeroClienteComparator<AbstractCliente>());
注意事项
- 若你需要自定义淘汰规则,仅需修改
add方法中的元素移除逻辑即可 - 如果业务中频繁使用批量添加操作,建议重写
addAll方法增加同样的容量校验逻辑,避免单次批量添加后容量超出阈值
内容的提问来源于stack exchange,提问作者Lorenzo Bucci
相关产品推荐
相关产品推荐

