假设我有自己的链表实现:
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
有了这个简单的设置后,我可以在Map中使用一个节点:
ListNode A = new ListNode(1);
ListNode B = new ListNode(2);
ListNode C = new ListNode(3);
A.next = B;
B.next = C;
Map<ListNode, Integer> hmp = new HashMap<>(Map.ofEntries(
Map.entry(A, 1)
));
当我打印Map对象时,我得到了:
System.out.println(hmp);
// >>> {ListNode@57829d67=1}
但是,在为链表实现toString方法之后,我可以直接将其打印出来:
public String toString() {
if (this.next != null) {
return this.val + "->" + this.next.showString();
} else {
return String.valueOf(A.val);
}
}
现在,如果我可以很好地打印链接列表,但是如果我再次打印地图,则:
System.out.println(A);
// >>> 1->2->3
System.out.println(hmp);
// >>> {1->2->3=1}
您会发现我迷失了显示地图中ListNode
对象身份的原始方式。
ListNode@57829d67
的方法?我唯一看到的不是覆盖toString方法,而是创建一个不同的方法来显示我的链表对象的字符串。我不确定这是否是个好主意
谢谢
答案 0 :(得分:3)
不是“身份”;它是您的hashCode()
中的ListNode
。随时致电hashCode()
以获得“ 57829d67”。