对象实例中的列表列表(java)
我定义了一个班级“学生”。类的每个实例都有一个名称和n*m首选项(都是字符串)对象实例中的列表列表(java),java,list,object,Java,List,Object,我定义了一个班级“学生”。类的每个实例都有一个名称和n*m首选项(都是字符串) 公共班级学生{ 字符串名; 列表选项=新建ArrayList(); 公立学生(字符串名称1,列表首选项){ this.firstName=name1; this.choice.addAll(首选项); } } 接下来,我有一个列表,其中可以保存每个学生对象 List<Student> students = new ArrayList<Student>(); List students=ne
公共班级学生{
字符串名;
列表选项=新建ArrayList();
公立学生(字符串名称1,列表首选项){
this.firstName=name1;
this.choice.addAll(首选项);
}
}
接下来,我有一个列表,其中可以保存每个学生对象
List<Student> students = new ArrayList<Student>();
List students=new ArrayList();
现在的问题是,当我在列表中保存一个学生时,它工作正常。但是,当我将第二个学生添加到列表中时,第一个学生的首选项将被覆盖。我添加和读取数据如下:
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);
List preferences=new ArrayList();
列表首选项1=新的ArrayList();
列表首选项2=新的ArrayList();
//添加第一个学生
preferences.clear();首选项1.clear();首选项2.clear();
优先权1.添加(“公司1”);优先权1.添加(“公司3”);
优先权2.添加(“公司2”);优先权2.添加(“公司4”);
首选项。添加(首选项1);首选项。添加(首选项2);
添加(新学生(“Michiel”,首选项));
//添加第二个学生
preferences.clear();首选项1.clear();首选项2.clear();
优先权1.添加(“公司5”);优先权1.添加(“公司7”);
优先权2.添加(“公司6”);优先权2.添加(“公司8”);
首选项。添加(首选项1);首选项。添加(首选项2);
添加(新学生(“威廉”,首选项));
System.out.println(students.get(0.choice));
System.out.println(students.get(1.choice));
出什么事了?我已经在课堂上试过“期末考试”
一个小问题,你建议使用Arraylist还是List?当你添加下一个
学生时,你不能重复使用相同的List
。您保存的只是一个引用,因此稍后清除它将清除所有保存的首选项。为每个学生创建新的首选项列表
s,您就可以:
...
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));
。。。
首选项=新的ArrayList();
preferences1=新的ArrayList();
preferences2=新的ArrayList();
//添加第二个学生
优先权1.添加(“公司5”);优先权1.添加(“公司7”);
优先权2.添加(“公司6”);优先权2.添加(“公司8”);
首选项。添加(首选项1);首选项。添加(首选项2);
添加(新学生(“威廉”,首选项));
一个小问题,你建议使用Arraylist还是List
你正在做的看起来很好。您需要选择列表
接口的一些具体实现,并且您选择了非常合理的ArrayList
。
此外,您正在声明接口类型的变量列表
,这是执行此操作的首选方法。您需要为每个学生创建一个新的首选项列表,如下所示:
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);
List preferences1=newarraylist();
列表首选项1=新的ArrayList();
列表首选项2=新的ArrayList();
//添加第一个学生
preferences.clear();首选项1.clear();首选项2.clear();
优先权1.添加(“公司1”);优先权1.添加(“公司3”);
优先权2.添加(“公司2”);优先权2.添加(“公司4”);
首选项。添加(首选项1);首选项。添加(首选项2);
添加(新学生(“Michiel”,首选项));
//添加第二个学生
List secondPreferences=new ArrayList();
List secondPreferences2=new ArrayList();
List secondPreferences3=新建ArrayList();
//首选项1.clear();首选项2.clear();首选项3.clear();//你不需要清除那些!因为它们是新的列表
第二优先权2.添加(“公司5”);第二优先权2.添加(“公司7”);
第二优先权3.添加(“公司6”);第二优先权3.添加(“公司8”);
添加(首选项1);添加(首选项2);
添加(新学生(“威廉”,第二偏好));
System.out.println(students.get(0.choice));
System.out.println(students.get(1.choice));
祝你好运 你应该每次都创建一个新的列表,而不是清除首选项列表。如果我这样做,那么带有clear()的行是否仍然是必需的?此外,当我为每个学生添加一个新列表时,该列表需要比前一个名称更大的名称。编辑:这不是真的,我将其定义为List preferences=new ArrayList();而不是首选项=new ArrayList();非常感谢@米切尔:不,这个名字无关紧要,它只是一个参考。只要每次都指向一个新的列表
,使用相同的引用就没有问题。在这个答案中,每个学生都需要一个新的名字。因此,我更喜欢第一个答案,因为我不知道学生人数。学生的名字与参考文献列表有什么关系?我指的是参考文献的名称,在你的例子中是第二个首选项2。
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);