我正在尝试创建一个像这样的对象列表:
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());
}
它只给了我“大卫”而不是“约翰”和“大卫”
有人可以告诉我该怎么做?
答案 0 :(得分:5)
您只创建了一个对象:
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循环
答案 1 :(得分:3)
试试这个代码我修改了它。您只创建了一个对象并更改其状态。
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());
}
答案 2 :(得分:2)
您应该创建单独的对象。您正在修改相同的对象,因此丢失了先前的对象状态。
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());
}
答案 3 :(得分:2)
您在不将其添加到列表的情况下更改员工的密钥和值,因此它将仅显示最后一个密钥和最后一个值。
以下是如何操作:
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);
答案 4 :(得分:2)
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());
}
答案 5 :(得分:1)
当您为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。这将有效。
答案 6 :(得分:1)
你的问题非常简单。在您的尝试中,您将修改同一对象两次。 您必须创建两个单独的对象来纠正您的问题。
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);
但在您的情况下,我认为,您将来不需要修改员工的key
和value
。您可以更好地将键和值设置器移动到构造函数来创建这样的员工。
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;
}
}
另外,我认为,您可以将键和值字段名称更改为更明确的名称。 希望这可以帮助您进行代码学习。 玩得开心!