我写了一小段代码来实现链表数据结构。我有一个内部类"节点",它有两个字段节点和值。链表的构造函数接受 int 值参数并将该值分配给 Node 对象,并将 Node 对象添加到LinkedList
对象。
我的问题是java.util.LinkedList的哪个代码使列表对象打印为数字列表,而不是其对象的地址?
当我打印"list1"时,输出是 [3,4]。 当我打印"列表"时,输出是对象地址的哈希码。
我在班上没有找到java.util.LinkedList
toString()
。
如何使我的代码打印链表的内容?
下面是代码:
class LinkedList {
Node first;
Node getNode(){
return new Node();
}
class Node{
Node next;
int value;
}
void add(int value){
Node n=this.getNode();
n.value=value;
n.next=null;
if (first==null){
first=n;
} else{
first.next=n;
}
}
}
public class LinkedListTest{
public static void main(String[] args) {
LinkedList list=new LinkedList();
java.util.LinkedList<Integer> list1=new java.util.LinkedList<>();
list1.add(3);
list1.add(4);
list.add(1);
list.add(2);
System.out.println(list);
System.out.println(list1);
}
}
您的类LinkedList
(我建议您重命名它,因为它可能会与java.util.LinkedList
混淆(需要覆盖方法Object::toString
,该方法在打印输出到控制台时调用。
我没有在java.util.LinkedList类中找到toString((。
有点侦探性的工作 - 您必须单击扩展LinkedList<E>
AbstractSequentialList<E>
扩展AbstractList<E>
最终扩展AbstractCollection<E>
(源代码(类的源代码,其中被覆盖Object::toString
负责所有元素的类似字符串表示的方法。在那里你可以得到灵感。
如何使我的代码打印链表的内容?
这边:
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
if (first != null) {
Node temp = first;
String sep = "";
while (temp != null) {
sb.append(sep).append(temp.value);
temp = temp.next;
sep = ", ";
}
}
return sb.append(']').toString();
}
例如,您必须创建自己的toString
方法
class LinkedList {
//...
@Override
public String toString() {
StringBuilder text = new StringBuilder("[");
String del = "";
if (first != null) {
do {
text.append(del).append(first.value);
first = first.next;
del = ", ";
} while (first != null);
}
text.append(']');
return text.toString();
}
}
如果再次运行代码,则输出
[1, 2]