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

标签 java list object

我定义了一个“学生”类。该类的每个实例都有一个名称和 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/

相关文章:

java - 如何在 Spring Boot 中禁用 ErrorPageFilter?

java - 如何识别 Windows 中的默认 Java 堆大小

html - 背景随列表展开

c++ - 无法编译 C++ 代码 : invalid conversion from 'Node*' to 'int'

javascript - 如果内部元素不同,如何从每个循环中获取数组的值

java - ArrayList 内的 ArrayList 被覆盖

java - update(Integer, Integer) 方法对于 CircularLinkedList<Integer> 类型不明确

Android 下拉列表(iPhone 风格)

python - 如何读取二维数组的用户定义输入

java - 如何读取CSV文件并对数据进行操作?