簡體   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