java - 链表复制构造函数

标签 java linked-list copy-constructor

我在使用 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(),这是一个不同列表!

在不检查其余代码的情况下,我怀疑这是问题的根本根源。

你有两个选择:

  1. 员工扩展列表
  2. Employees 包含一个 List

我更喜欢第二个。您可以更改底层集合(例如 Set,也许是 Map 以获得更好的查找性能),而不更改公开的接口(interface)。

关于java - 链表复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13643381/

相关文章:

java - LinkedList 与 ArrayList 在维护有序列表方面的性能

c++ - 当它被忽略时,返回值(返回一个对象)会发生什么?

C++ 复制构造函数失败

java - 使用 Digester 解析 XML

java - 将 Eclipse 项目与 Google Drive 同步

c - 推送链接列表 - C

c - 删除链接结构的值

c++ - 具有重载数据成员、构造函数和运算符的抽象基类

java - 返回 FileInputStream 指向的旧位置

java - 如何更正 EST 格式的日期?