繁体   English   中英

在JAVA中创建对象列表

[英]Creating List of Objects in JAVA

我正在尝试创建一个像这样的对象列表:

List<Employee> employee= new ArrayList<Employee>();

为此设置一个键和值,如下所示:

Employee emp = new Employee();
emp.setKey("John");
emp.setValue("305");
emp.setKey("David");
emp.setValue("790");

最后,我把它放在一个清单上:

employee.add(emp);

当我打印时,它只给我最后一个条目:

for(Employee em : employee){      
 System.out.println(em.getKey());
}

它只给我“大卫”而不是“约翰”和“大卫”

有人能告诉我该怎么办?

您只创建了一个对象:

Employee emp = new Employee();
emp.setKey("John");
emp.setValue("305");
Employee emp1 = new Employee();
emp1.setKey("David");
emp1.setValue("790");
employee.add(emp);
employee.add(emp1);

现在运行for循环

试试这个代码我修改了它。 您只创建了一个对象并更改其状态。

    List<Employee> employee= new ArrayList<Employee>();

    Employee emp = new Employee();
    emp.setKey("John");
    emp.setValue("305");
    Employee emp1 = new Employee();
    emp1.setKey("David");
    emp1.setValue("790");

    employee.add(emp);
    employee.add(emp1);


    for(Employee em : employee){      
     System.out.println(em.getKey());
    }

您应该创建单独的对象。 您正在修改相同的对象,因此丢失了先前的对象状态。

List<Employee> employee= new ArrayList<Employee>();
// create employee 1
Employee emp1 = new Employee();
emp1.setKey("John");
emp1.setValue("305");
// create employee 2
Employee emp2 = new Employee();
emp2.setKey("David");
emp2.setValue("790");
// add both employees to list
employee.add(emp1);
employee.add(emp2);
for(Employee em : employee){      
     System.out.println(em.getKey());
}

您更改密钥和员工的价值而不将其添加到列表中,因此它将仅显示最后一个密钥和最后一个值。

这是怎么做的:

Employee emp = new Employee();
emp.setKey("John");
emp.setValue("305");
employee.add(emp);
emp = new Employee();
emp.setKey("David");
emp.setValue("790");
employee.add(emp);
List<Employee> emploee = new ArrayList<Employee>();

Employee emp1 = new Employee();
emp1.setKey("John");
emp1.setValue("305");
employee.add(emp1);

Employee emp2 = new Employee();
emp2.setKey("David");
emp2.setValue("790");
employee.add(emp2);

for(Employee em : employee){
System.out.println(em.getKey());
}

// or if you want to set the values via constructor

List<Employee> emploee = new ArrayList<Employee>();

employee.add(new Employee("John", "305"));
employee.add(new Employee("David", "790"));

for(Employee em : employee){
System.out.println(em.getKey());
}

当您为emp对象设置值时,您将使用David覆盖John的数据

Employee emp = new Employee();
emp.setKey("John");
emp.setValue("305");

在同一个对象“emp”中,您正在添加新条目。

emp.setKey("David");
emp.setValue("790");

您需要为David创建新对象

  Employee emp1 = new Employee();
  emp1.setKey("David");
  emp1.setValue("790");

然后将两个对象添加到List。 这会奏效。

你的问题很简单。 在您的尝试中,您将修改同一对象两次。 您必须创建两个单独的对象来更正您的问题。

Employee emp1 = new Employee();
emp1.setKey("John");
emp1.setValue("305");
employee.add(emp1);

Employee emp2 = new Employee();
emp2.setKey("David");
emp2.setValue("790");    
employee.add(emp2);

但在我看来,我认为,您不需要在将来修改员工的keyvalue 您可以更好地将键和值设置器移动到构造函数来创建这样的员工。

employee.add(new Employee("John", "305"));
employee.add(new Employee("David", "790"));

此外,您的value字段似乎是一个int而不是一个String 我认为你可以更好地切换你的价值类型。

employee.add(new Employee("John", 305));
employee.add(new Employee("David", 790));

Employee类的一个小例子,包含所有修改

public class Employee {
    private final String key;
    private final int value;

    public Employee(String key, int value) {
        this.key = key;
        this.value = value;
    }

    public String getKey() {
        return key;
    }

    public int getValue() {
        return value;
    }
}

此外,我认为,您可以将键和值字段名称更改为更明确的名称。 希望这可以帮助您进行代码学习。 玩得开心 !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM