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.add
将Node
的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());
应该为你做的伎俩。