我在使用 Java 中 Linkend List 的复制构造函数时遇到问题。 我尝试复制的列表的大小为 3,当我使用复制构造函数时,列表为空。
当我用克隆方法尝试这个时,一切都很好。 我已经看了很长一段时间了,我感觉它是如此明显。我只是 没看到,这是代码。
public class Employee {
private String name;
private double salary;
public Employee(String name, double salary){
this.name = name;
this.salary = salary;
}
public void setname(String name){
this.name = name;
}
public void setsalary(double salary){
this.salary = salary;
}
public String getname(){
return this.name;
}
public double getsalary(){
return this.salary;
}
}
public class Main {
public static void main(String[] args) {
Employees employees = new Employees();
employees.add(new Employee("Employee1", 2500.00));
employees.add(new Employee("Employee2", 2400.00));
employees.add(new Employee("Employee3", 2000.00));
Employees employeesCopy2 = new Employees(employees);
Employees employeesCopy = (Employees) employees.clone();
System.out.println(employees.size());
System.out.println(employeesCopy2.size());
System.out.println(employeesCopy.size());
}
}
import java.util.LinkedList;
public class Employees extends LinkedList<Employee> {
private static final long serialVersionUID = 1L;
private LinkedList<Employee> employees;
public Employees(){
employees = new LinkedList<Employee>();
}
public Employees(Employees w){
employees = new LinkedList<Employee>(w);
}
public void addWerknemer(Employee w){
employees.add(w);
}
}
编辑
这是作业,但是当我想添加标签时,显示该标签不再使用。
最佳答案
我认为:
public class Employees extends LinkedList<Employee> {
private LinkedList<Employee> employees;
将创造一个困惑的世界。你们都在扩展一个列表,并且在该类中维护一个单独的列表。当您调用 addWerknemer()
时,您将添加到内部列表中。当您调用 get()
时会发生什么?由于您没有重写它,因此您在基类上调用 get()
,这是一个不同列表!
在不检查其余代码的情况下,我怀疑这是问题的根本根源。
你有两个选择:
员工
扩展列表
Employees
包含一个List
我更喜欢第二个。您可以更改底层集合(例如 Set
,也许是 Map
以获得更好的查找性能),而不更改公开的接口(interface)。
关于java - 链表复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13643381/