Java 从LinkedQueue获取类对象数据
首先,我想说,这是我在这里的第一篇帖子,如果我做错了什么,请告诉我 我有一个叫做EmployeeRecord的课程: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);
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方法。