Java 从LinkedQueue获取类对象数据

Java 从LinkedQueue获取类对象数据,java,queue,Java,Queue,首先,我想说,这是我在这里的第一篇帖子,如果我做错了什么,请告诉我 我有一个叫做EmployeeRecord的课程: void setEmployeeRecord(int empNo, String firstName, String lastName, int age) { this.setEmpNo(empNo); this.setFirstName(firstName); this.setLastName(lastName);

首先,我想说,这是我在这里的第一篇帖子,如果我做错了什么,请告诉我

我有一个叫做EmployeeRecord的课程:

void setEmployeeRecord(int empNo, String firstName, String lastName, int age) {
        this.setEmpNo(empNo);
        this.setFirstName(firstName);
        this.setLastName(lastName);
        this.setAge(age);
    }
我还有一个带有基本set/get Node next/Object元素的Node类,一个带有isEmpty、insert、remove、getTail、size和search的LinkedQueue类

在我的GUI中,我有4个文本字段,其中包含employeeID、firstName、lastName和age

当我按insert时,我想将这些值添加到

员工记录er=新员工记录;->er.setemployeerecordum,fN,lN,agei

然后我想将它们添加到我的LinkedQueue-lq.appender

我遇到的问题是,当我想在文本区域中显示LinkedQueue中存储的信息时。 我找不到从中获取“实际”数据的方法,目前我有这样的方法:

 textArea.setText(lq.Search()); 

 -> 

 //This is the LinkedQueue class
 public String Search() {
    String msg = "";
    Node currentNode = this.head;
    while (currentNode != null) {
        msg += (currentNode.getElement().toString() + "\n");
        currentNode = currentNode.getNext();
    }

    return msg;
}
我得到的输出是:appletviewer。EmployeeRecord@2e1a6955

如何获得ArrayList可以轻松获得的实际输出

我不能用ArrayList

您必须重写EmployeeRecord中的toString方法

您在队列中保存了EmployeeRecord对象。打印元素时,调用对象的toString函数。如果不重写它,将使用默认值并打印对象的标识符

试着这样做:

@Override
public String toString() {
  return "EmpNo: " +  empNo  + "\nFirstName: "+ firstName + "\nLastName: " + lastName + "\nAge: "+age;
}

currentNode.getElement.toString正在将当前节点的信息转换为字符串,而不是当前节点内的实际信息,在本例中,这两种信息并不相同,因为当前节点是节点对象的一种类型。 要显示员工的信息,您必须进一步询问当前节点的详细信息,在这种情况下,两个信息都将匹配,因为currentNode.Special是一个元素对象

所以代码中的修改应该是

msg += (currentNode.name+" "+currentNode.empnum+ "\n");

其中name和empnum应替换为employee类的属性。

Java中的队列主要用于并发包中。这就是你想要的吗?您特别使用哪个队列,LinkedBlockingQueue?编写一个格式化程序,以EmployeeRecord实例为例,以预定义的格式返回字符串-避免使用字符串进行表示,因为它限制了可用的选项,所以toString通常应用于调试purposes@markspaceLinkedQueue lq=新LinkedQueue;有几种类型的队列确实重写了toString方法。所以我想知道OP使用的是哪个类而不是。是的,队列覆盖了基本数据类型(如Integer或String)的toString方法。但是,如果您在其中放置了一个自定义对象,如EmployeeRecord,则必须自己实现toString。@rheinz但这不就是当前/最新显示的吗?我是否可以对每个对象执行一次操作以显示所有对象?例如,如果我添加了5个employeeRecords?我明白你的意思。但我认为可以迭代LinkedQueue类中的队列元素,并调用每个元素currentNode.toString;您是否尝试过在EmployeeRecord中添加toString?我认为你的搜索方法看起来不错。对于您的问题:由于队列中的while循环,您迭代了每个元素。你调用了toString中的每个元素。没错。但是自定义EmployeeRecord类中的toString不返回什么,所以它只返回标识符。如果重写toString,则可以控制返回。如果要将其添加到LinkedQueue类,则必须在类内创建EmployeeRecord er=new EmployeeRecord,这将使该值始终为0或null。在添加到LinkedQueue之前,应为Employee类的每个新对象调用setEmployeeRecord方法。