重写toString方法时,应确保返回的字符串只包含有用的信息。如果不想打印哈希码,可以将其从返回的字符串中删除。以下是一个示例二叉树类及其toString方法的重写。
public class BinaryTree {
private T value;
private BinaryTree left;
private BinaryTree right;
public BinaryTree(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public void setLeft(BinaryTree tree) {
left = tree;
}
public void setRight(BinaryTree tree) {
right = tree;
}
public BinaryTree getLeft() {
return left;
}
public BinaryTree getRight() {
return right;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
toStringHelper(sb, "");
return sb.toString();
}
private void toStringHelper(StringBuilder sb, String prefix) {
sb.append(prefix).append(value).append("\n");
if (left != null) {
left.toStringHelper(sb, prefix + " ");
}
if (right != null) {
right.toStringHelper(sb, prefix + " ");
}
}
}
在上面的例子中,toStringHelper方法递归地遍历二叉树,并将每个节点的值转为字符串附加到StringBuilder对象中。前缀参数用于缩进每个节点值的文本,以便在输出时保持指向正确级别的缩进。这样,toString方法将返回一个只包含有用信息的字符串,而没有哈希码。