LinkedList Java遍历和打印

LinkedList Java遍历和打印,java,list,linked-list,Java,List,Linked List,如果您能帮助回答这个问题,我将不胜感激: 我已经用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

如果您能帮助回答这个问题,我将不胜感激:

我已经用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
为什么它打印出引用而不是字符串的实际值,比如bat、ant、rat

如果我想打印出实际值,那么我应该怎么做


非常感谢

LinkedList是对象列表,对象到字符串方法打印出参考。如果要打印字符串,您需要将LinkedList更改为string/Generics,或按如下方式强制打印:

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

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

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

@Override
String toString() {
  String val = // however you want to represent your Node
  return val;
}
并打印节点:

System.out.println(tmp);
或者,让
节点.getData()
返回一个
字符串
,如果您知道只存储
字符串
s——在
节点
定义中将
对象
s更改为
字符串

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

更新:经过一点思考(受到评论的刺激),我发现有点不对劲:


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

您的
linkedList
类已经为您创建了
节点
s

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
节点类中的getData()返回一个对象类型。您需要将其转换为字符串,以便println()正确打印它

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


这是一个旁白,但是你为什么不使用泛型呢?你可以将toString()方法添加到你的节点类中,然后它应该可以很好地打印
linkedList
是他自己的类。@Jeffrey
linkedList
是tmp的类型
Node
,这是他的类,也是节点的数据(由
getData()返回)
)的类型为
Object
java.util。LinkedList
没有
getHead
方法。另外,
System.out.println((对象)“hello”)
将打印
hello
,而不是对象的引用。方法重写解决了这个问题。@Jeffrey他没有使用
java.util.LinkedList
他自己写的。代码在问题中。@Jeffrey。。是的,你是对的,我将节点对象添加到列表中,这是@twain249的错误之一。我确实将所有内容都更改为字符串,并且它工作了。。谢谢大家anyway@Jeffrey-一定是什么地方出了问题-可能是我:)OP说
System.out.println(tmp.getData())
打印引用,但这应该返回一个字符串(存储的对象),然而,实际输出显示正在打印的
节点
s…如果将对象传递给println(),它将调用.toString(),对于字符串,这将返回字符串,强制转换对此没有帮助。