2

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

我已经使用 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... ?

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

非常感谢

4

4 回答 4

4

您的linkedList班级已经Node为您创建了 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
于 2012-04-16T00:53:37.140 回答
1

您需要覆盖以下toString()方法Node

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

并打印节点:

System.out.println(tmp);

或者,如果您知道您只打算存储s ,则Node.getData()返回 a -在定义中将s更改为StringStringObjectStringNode

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

更新:经过更多思考(由评论引起),我发现有些不对劲:

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

于 2012-04-16T00:41:28.437 回答
-1

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

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

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

于 2012-04-16T00:41:03.603 回答
-1

Node 类中的 getData() 返回一个 Object 类型。您需要将其转换为字符串,以便 println() 正确打印它。

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

应该为您解决问题。

于 2014-05-07T15:44:08.657 回答