对象实例中的列表列表(java)

时间:2014-04-06 11:31:37

标签: java list object

我已经定义了一个班级的学生'。该类的每个实例都有一个名称和n * m首选项(它们是String)。

public class Student {
    String firstName;
    List<List<String>> choice = new ArrayList<List<String>>();

    public Student(String name1, List<List<String>> preference){
        this.firstName = name1;
        this.choice.addAll(preference); 
    }
}

接下来,我有一个列表,其中可以保存每个学生对象。

List<Student> students = new ArrayList<Student>();

现在的问题是,当我在列表中保存一名学生时,它工作正常。但是,当我将第二个学生添加到列表中时,第一个学生的首选项将被覆盖。我添加并读取数据如下,

List<List<String>> preferences = new ArrayList<List<String>>();
List<String> preferences1 = new ArrayList<String>();
List<String> preferences2 = new ArrayList<String>();


// add first student
preferences.clear(); preferences1.clear(); preferences2.clear();
preferences1.add("Company1"); preferences1.add("Company3");
preferences2.add("Company2"); preferences2.add("Company4");
preferences.add(preferences1); preferences.add(preferences2);
students.add(new Student("Michiel", preferences));

// add second student
preferences.clear(); preferences1.clear(); preferences2.clear();
preferences1.add("Company5"); preferences1.add("Company7");
preferences2.add("Company6"); preferences2.add("Company8");
preferences.add(preferences1); preferences.add(preferences2);
students.add(new Student("William", preferences));

System.out.println(students.get(0).choice);
System.out.println(students.get(1).choice);

出了什么问题?我已经尝试了#final;#39;在课堂上。

PS。一个小的子问题,你建议使用Arraylist或List吗?

2 个答案:

答案 0 :(得分:2)

添加下一个List时,您无法重复使用相同的Student。您保存的内容仅供参考,因此稍后清除它将清除您保存的所有首选项。为每个List创建新的Student个偏好设置,您就可以了:

...

preferences = new ArrayList<List<String>>();
preferences1 = new ArrayList<String>();
preferences2 = new ArrayList<String>();

// add second student
preferences1.add("Company5"); preferences1.add("Company7");
preferences2.add("Company6"); preferences2.add("Company8");
preferences.add(preferences1); preferences.add(preferences2);
students.add(new Student("William", preferences));
  

PS。一个小的子问题,你建议使用Arraylist或List吗?

你在做什么看起来很好。您需要选择List界面的一些具体实现,并选择ArrayList,这是完全合理的。
此外,您正在声明接口类型List的变量,这是执行此操作的首选方法。

答案 1 :(得分:0)

您需要为每个学生创建一个新的偏好列表,如下所示:

    List<List<String>> preferences1 = new ArrayList<List<String>>();
    List<String> preferences1 = new ArrayList<String>();
    List<String> preferences2 = new ArrayList<String>();


    // add first student
    preferences.clear(); preferences1.clear(); preferences2.clear();
    preferences1.add("Company1"); preferences1.add("Company3");
    preferences2.add("Company2"); preferences2.add("Company4");
    preferences.add(preferences1); preferences.add(preferences2);
    students.add(new Student("Michiel", preferences));

    // add second student

 List<List<String>> secondPreferences = new ArrayList<List<String>>();
    List<String> secondPreferences2 = new ArrayList<String>();
    List<String> secondPreferences3 = new ArrayList<String>();

// preferences1.clear(); preferences2.clear(); preferences3.clear(); // you don't need to clear those ! as they are new lists

    secondPreferences2.add("Company5"); secondPreferences2.add("Company7");
    secondPreferences3.add("Company6"); secondPreferences3.add("Company8");
    secondPreferences.add(preferences1); secondPreferences.add(preferences2);
    students.add(new Student("William", secondPreferences));

    System.out.println(students.get(0).choice);
    System.out.println(students.get(1).choice);
祝你好运。