简体   繁体   English

在JAVA中创建对象列表

[英]Creating List of Objects in JAVA

I am trying to create a list of objects like this : 我正在尝试创建一个像这样的对象列表:

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

Set a key and value for this like this : 为此设置一个键和值,如下所示:

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

And finally, I put this on a list : 最后,我把它放在一个清单上:

employee.add(emp);

When I print, it gives me only last entry : 当我打印时,它只给我最后一个条目:

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

It only give me "David " as a result and not "John" and "David" 它只给我“大卫”而不是“约翰”和“大卫”

Can somebody tell me how should I do this ? 有人能告诉我该怎么办?

You have created only one object: 您只创建了一个对象:

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

Now run the for loop 现在运行for循环

Try this code I modified It. 试试这个代码我修改了它。 You have created only one object and change its status. 您只创建了一个对象并更改其状态。

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

You should create separate objects . 您应该创建单独的对象。 Your are modifying same object hence previous object state is lost. 您正在修改相同的对象,因此丢失了先前的对象状态。

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

Your changing the key and the value of the employee without adding it to the list, so it will show only the last key and the last value. 您更改密钥和员工的价值而不将其添加到列表中,因此它将仅显示最后一个密钥和最后一个值。

Here's how to do it: 这是怎么做的:

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

When you are setting values to emp object you are overriding John's data with David 当您为emp对象设置值时,您将使用David覆盖John的数据

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

In same object "emp" you are adding new entry. 在同一个对象“emp”中,您正在添加新条目。

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

You need to create new object for David 您需要为David创建新对象

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

then add both object to List. 然后将两个对象添加到List。 This will work. 这会奏效。

Your problem is pretty simple. 你的问题很简单。 In your attempt, you modify the same object two times. 在您的尝试中,您将修改同一对象两次。 You have to create two separated object to correct your problem. 您必须创建两个单独的对象来更正您的问题。

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

But in your case, i think, you doesn't need to modify key and value of employee in the future. 但在我看来,我认为,您不需要在将来修改员工的keyvalue It could be better for you to move key and value setter to constructor to create your employees like this. 您可以更好地将键和值设置器移动到构造函数来创建这样的员工。

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

Also, your value field seem to be an int and not a String . 此外,您的value字段似乎是一个int而不是一个String I think it could be better for you to switch your value type. 我认为你可以更好地切换你的价值类型。

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

A little example of Employee class with all modifications 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;
    }
}

Also, i think, you could change key and value fields name to more explicit name. 此外,我认为,您可以将键和值字段名称更改为更明确的名称。 Hope this could help you in your code learning. 希望这可以帮助您进行代码学习。 Have Fun ! 玩得开心 !

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

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