在JAVA中创建对象列表

时间:2018-02-06 09:30:19

标签: java arraylist

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

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());
}

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

有人可以告诉我该怎么做?

7 个答案:

答案 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);

但在您的情况下,我认为,您将来不需要修改员工的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;
    }
}

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