嗨,我正在尝试创建一个链表来存储一些数据。如何从列表值中检索实际数据,而不是项目的对象引用。
public class myList()
{
private LinkedList<Node> list = null;
public myList()
{
list = new LinkedList<Node>();
}
public void addX(Node x)
{
list.add(x)
}
public void print()
{
for(int i = 0; i<list.size(); i++)
{
System.out.println(list.get(i));
}
}
}
public class Node
{
private String x;
private int y;
private int z;
public Node(String x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
}
public static void main (String[] args)
{
myList.addX(new Node(x,1,2));
myList.print();
}
当我运行它时,它打印内存地址/引用而不是实际值。我究竟做错了什么? 输出示例:节点@ 838378c7
感谢任何帮助。
感谢。
答案 0 :(得分:3)
toString()
中的 Object
方法是
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
这正是将被打印的内容。您需要在Node
类中覆盖它以显示toString()的输出。
答案 1 :(得分:0)
您看到的输出是由默认的toString()
- 方法生成的,以获得您需要覆盖toString()
- 方法的输出格式。
有关详细信息,请参阅this question
答案 2 :(得分:0)
您正在打印没有Node
方法的toString()
类对象,因此它使用Object类的toString()
来打印您看到的输出。
覆盖到toString()
方法并在该方法中以您希望的方式打印内容,以便在打印Node
对象时输出正如您所期望的那样
答案 3 :(得分:0)
覆盖toString
类上的Node
方法:
public class Node
{
private String x;
private int y;
private int z;
public Node(String x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
@Override
public String toString() {
return x + "/" + y + "/" + z;
}
}
此示例使用&#34; /&#34;返回x,y和z值。每个之间的分隔符。但是,您显然可以更改toString
方法的返回值,以适合您希望数据显示的方式。
这tutorial很好地解释了这个概念。