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

泛型SimpleHistogram构造器优化:解决数组入参适配问题

泛型直方图构造器适配数组输入的解决方案

问题核心

当前SimpleHistogram类仅提供了基于List的初始化构造器,但测试用例传入的是Character[]数组,没有匹配的构造器导致编译错误;如果单独为Character[]编写构造器,会破坏泛型的通用性,无法适配其他类型的数组。

解决思路

新增一个支持泛型数组输入的构造器,通过将数组转换为List来复用现有构造器的统计逻辑,既满足数组输入需求,又保持泛型的通用性。同时修正原代码中的逻辑错误,补充必要的接口方法。

修改后的完整代码

class SimpleHistogram<T> implements Histogram<T>, Iterable<T> {

    private final Map<T, Integer> bins = new HashMap<>();

    public SimpleHistogram() {
        this(List.of());
    }

    // 新增支持泛型数组的构造器
    public SimpleHistogram(T[] items) {
        this(Arrays.asList(items));
    }

    SimpleHistogram(List<? extends T> items) {
        for (T item : items) {
            Integer count = bins.getOrDefault(item, 0);
            bins.put(item, count + 1);
        }
    }

    @Override
    public void setCount(T item, int count) {
        bins.put(item, count);
    }

    @Override
    public Iterator<T> iterator() {
        return bins.keySet().iterator();
    }

    @Override
    public int getTotalCount() {
        // 修正原逻辑错误:总计数是所有元素出现次数的总和,而非不同元素的数量
        return bins.values().stream().mapToInt(Integer::intValue).sum();
    }

    // 补充Histogram接口必需的getCount方法
    @Override
    public int getCount(T item) {
        return bins.getOrDefault(item, 0);
    }
}

关键说明

  1. 数组构造器实现:通过Arrays.asList(items)将泛型数组转换为List,直接调用现有构造器完成统计逻辑,避免重复代码
  2. 修复总计数逻辑:原代码中bins.size()返回的是不同元素的数量,不符合getTotalCount的语义,改为对Map中所有值求和
  3. 补充接口方法:测试用例中调用了getCount方法,原代码未实现该接口方法,必须补充以保证编译通过

修改后,测试用例中的new SimpleHistogram<>(target)可以正常编译运行,无需改动测试代码。

内容的提问来源于stack exchange,提问作者user18984687

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:20:31