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

Java 20中无法打印HashSet<int[]>元素,求教问题原因及解决方法

问题解答:HashSet<int[]>打印显示内存地址的原因及解决方法

你忽略了数组的默认toString()方法不会输出元素内容——Java中数组是对象,但它的toString()方法没有被重写,默认返回的是数组的内存标识字符串(格式类似[I@xxxxxx,其中[I表示int类型数组,@后面是哈希码的十六进制值)。不管是直接调用System.out.println(int[]),还是HashSet调用toString()时内部遍历数组调用其toString(),都会输出这个内存标识。

解决方法:

  • 逐个打印数组元素时,使用Arrays.toString()
    修改你代码里的循环部分,用Arrays.toString()来格式化数组内容:

    import java.util.Arrays;
    // ... 其他导入代码
    while(it.hasNext()) {
        System.out.println(Arrays.toString(it.next()));
    }
    

    这样就能输出[1, 3, 6, 8, 10, 11, 14, 17, 21]这种包含元素的格式。

  • 让HashSet的toString()直接输出元素内容
    如果希望调用result.toString()时也能显示元素,不能使用int[],需要替换为**包装类数组Integer[]**或者List<Integer>:

    • 使用Integer[]的示例:
      Integer[] a1 = {1, 3, 6, 8, 10, 11, 14, 17, 21};
      HashSet<Integer[]> result = new HashSet<>(Arrays.asList(a1));
      System.out.println(result.toString());
      
      注意:HashSet存储Integer[]时,判断重复是基于数组引用而非元素内容。如果需要按元素内容去重,建议使用List<Integer>并配合自定义逻辑,或者封装一个重写了equals()和hashCode()的包装类。

另外补充:你当前代码仅将a1加入了HashSet,a2并未添加进去,若需要合并两个数组的元素并去重,可通过result.addAll(Arrays.asList(a2))实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:58:16