我怎样才能把这个数组变成一个做同样事情的ArrayList?

时间:2019-02-19 00:01:21

标签: java arrays oop arraylist

我想把这个程序的数组变成ArrayList。到目前为止,我知道该数组将变为

ArrayList<StudentList> list = new ArrayList<StudentList>();

,每个列表[i]都会变成:

list.get(i)

但是我不确定下面的代码是为了满足ArrayList版本

list[i] = new StudentList();

所以这是完整的代码:

public static void main(String[] args) {

    StudentList[] list = new StudentList[5];

    int i;

    for (i = 0; i < list.length; ++i) {

        list[i] = new StudentList();

        System.out.println("\nEnter information of Student _" + (i + 1) + "\n");
        list[i].DataUserPrompt();

    }
    for (i = 0; i < list.length; ++i) {

        list[i].DisplayStudentData();
    }

    File file12 = new File("s_records.txt");

    try {

        PrintWriter output = new PrintWriter(file12);

        output.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}

3 个答案:

答案 0 :(得分:0)

您可以使用add(int index, E element)在指定位置插入元素。

所以list[i] = new StudentList();将成为list.add(i, new StudentList());

但是在您的情况下,列表尚未填充,因此您应该使用add(E element),否则将得到IndexOutOfBoundsException,因为索引将大于列表的当前大小:

list.add(new StudentList());

答案 1 :(得分:0)

new StudentList[5]是一个大小为5的数组,所有值均为null,因此您可以使用new StudentList()创建5个对象并将其分配给5个数组索引。

但是,new ArrayList()创建一个列表(大小为0)。请注意,new ArrayList(5)还会创建一个空列表,它仅被优化为存储5个元素。因此,您需要创建并添加 5个对象:

List<StudentList> list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
    list.add(new StudentList());
}

以上等同于数组代码:

StudentList[] list = new StudentList[5];
for (int i = 0; i < 5; i++) {
    list[i] = new StudentList();
}

在这两种情况下,您最终得到的list大小为5,有5个对象。

答案 2 :(得分:0)

  

[...]到目前为止,我知道数组将变成

     
ArrayList<StudentList> list = new ArrayList<StudentList>();

是的,这是正确的,但是通常您会看到List而不是ArrayList

List<StudentList> list = new ArrayList<StudentList>();

其原因是Program to an Interface的概念。假设您想从ArrayList切换为List类型的另一种数据类型。如果您的代码现在已损坏,则可以轻松进行而不必担心。


  

但是我不确定下面的代码是为了满足ArrayList版本

     
list[i] = new StudentList();

由于list现在是一个对象,因此您必须通过方法与它进行交互。在oracle的ListArrayList文档中,您会发现很多。

但是对于这种情况,您将需要add(E e)。您也可以在文档中查找E,这意味着:

  

E-此列表中元素的类型

换句话说:E将是您的StudentList


public static void main(String[] args) {

    List<StudentList> list = new ArrayList<StudentList>();

    int i;

    for (i = 0; i < list.size(); ++i) {

        list.add(new StudentList());

        System.out.println("\nEnter information of Student _" + (i + 1) + "\n");
        list.get(i).DataUserPrompt();

    }
    for (i = 0; i < list.size(); ++i) {

        list.get(i).DisplayStudentData();
    }

    File file12 = new File("s_records.txt");

    try {

        PrintWriter output = new PrintWriter(file12);

        output.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}