You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:57:02