Java自定义HashTable类Display方法输出类名@哈希值而非整数值问题
问题根本原因
Java中直接打印自定义类对象时,默认会调用父类java.lang.Object的toString()方法,该方法返回值格式为类名@16进制哈希码,就是你看到的DataItem@xxxx格式的输出,属于没有自定义对象序列化逻辑的正常表现,不是代码运行错误。
解决方案
有两种常用的修复方式,任选其一即可:
方案1:修改哈希表打印逻辑
直接修改DisplayHashTable方法中的打印语句,不直接打印DataItem对象,改为打印其存储的键值:
// 原代码 // System.out.print(this.HashArray[i] + " "); // 修改后代码 System.out.print(this.HashArray[i].GetKey() + " ");
这个方案修改成本最低,无需改动其他类代码。
方案2:重写DataItem类的toString()方法
在你的DataItem类中添加toString方法的重写逻辑,后续所有直接打印DataItem对象的场景都会自动输出你定义的内容:
public class DataItem { // 你原有DataItem类的其他代码保持不变 // 新增如下方法即可 @Override public String toString() { // 直接返回键的字符串形式即可,有其他需要展示的字段也可以拼接在这里 return String.valueOf(GetKey()); } }
这个方案扩展性更好,后续其他场景需要打印DataItem时不需要重复修改打印逻辑。
额外优化提示
你当前的DisplayHashTable方法中,非空元素用print不换行,空元素用println换行,会导致输出格式混乱,可以统一成每行打印固定数量的元素,或者每次判断完元素后统一换行。
内容的提问来源于stack exchange,提问作者Murtaja
相关产品推荐
相关产品推荐

