我定义了一个“学生”类。该类的每个实例都有一个名称和 n*m 个首选项(均为字符串)。
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”。
ps。一个小问题,你建议使用Arraylist还是List?
最佳答案
添加下一个学生
时,您不能重复使用相同的列表
。您保存的内容只是一个引用,因此稍后清除它会清除您保存的所有首选项。为每个学生
创建新的列表
偏好设置,就可以了:
...
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. a small subquestion, do you suggest using Arraylist or List?
你正在做的事情看起来很好。您需要选择 List
接口(interface)的一些具体实现,并且您选择了 ArrayList
,这是完全合理的。
此外,您还要声明接口(interface)类型 List
的变量,这是首选方法。
关于java - 对象实例中的列表列表(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22893420/