LinkedList Java遍历和打印

如果你能帮忙回答这个问题我真的很感激:

我已经使用Java以非常标准的方式创建了自定义链表。 以下是我的课程:

public class Node { private Object obj; private Node next; public Node(Object obj){ this(obj,null); } public Node(Object obj,Node n){ this.obj = obj; next = n; } public void setData(Object obj){ this.obj = obj; } public void setNext(Node n){ next = n; } public Object getData(){ return obj; } public Node getNext(){ return next; } } public class linkedList { private Node head; public linkedList(){ head = null; } public void setHead(Node n){ head = n; } public Node getHead(){ return head; } public void add(Object obj){ if(getHead() == null){ Node tmp = new Node(obj); tmp.setNext(getHead()); setHead(tmp); }else{ add(getHead(),obj); } } private void add(Node cur,Object obj){ if(cur.getNext() == null){ Node tmp = new Node(obj); tmp.setNext(cur.getNext()); cur.setNext(tmp); }else{ add(cur.getNext(),obj); } } } 

我试图打印值已插入列表如下

 public static void main(String[] args) { // TODO code application logic here Node l = new Node("ant"); Node rat = new Node("rat"); Node bat = new Node("bat"); Node hrs = new Node("hrs"); linkedList lst = new linkedList(); lst.add(l); lst.add(rat); lst.add(bat); lst.add(hrs); Node tmp = lst.getHead(); while(tmp != null){ System.out.println(tmp.getData()); tmp = tmp.getNext(); } } 

但我从IDE获得的输出是

 linklist.Node@137bd6a1 linklist.Node@2747ee05 linklist.Node@635b9e68 linklist.Node@13fcf0ce 

为什么它打印出参考但不打印字符串的实际值,如蝙蝠,ant,老鼠……?

如果我想打印出实际值,那该怎么办?

非常感谢你

您的linkedList类已经为您创建了Node

 linkedList list = new linkedList(); list.add("foo"); list.add("bar"); Node tmp = lst.getHead(); while(tmp != null){ System.out.println(tmp.getData()); tmp = tmp.getNext(); } 

会打印

 foo bar 

您需要覆盖Node上的toString()方法:

 @Override String toString() { String val = // however you want to represent your Node return val; } 

并打印节点:

 System.out.println(tmp); 

或者,如果您知道只存储String ,则让Node.getData()返回一个String – 在Node定义中将Object更改为String

或者,您可以使用generics来指定节点内的数据类型

更新:经过多一点思考(由评论引起),我看到了一些不对劲:

tmp.getData()应返回一个字符串(基于Node的单个参数ctor,并且您正在传递字符串),但输出是关于Node对象的引用。 是否有可能linkedList.addNode的obj成员重新设置为Node

LinkedList是Objects,Objects toString方法打印出来的引用。 如果要打印出字符串,您可以将LinkedList更改为String / Generics,或者将打印输出为:

 String output = (String)tmp.getData(); System.out.println(output); 

(如果需要,可以在一行中执行此操作)。

Node类中的getData()返回一个Object类型。 您需要将其转换为String,以便正确地通过println()进行打印。

的System.out.println((字符串)tmp.getData());

应该为你做的伎俩。