Как я могу превратить этот массив в ArrayList, который делает то же самое? - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу превратить массив этой программы в 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 голосов
/ 19 февраля 2019

new StudentList[5] - это массив размера 5 со всеми значениями null, поэтому вы создаете 5 объектов с использованием new StudentList() и присваиваете 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 объектами.

0 голосов
/ 19 февраля 2019

[...] Пока я знаю, что массив превратится в

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

Да, это правильно, но обычно вы увидите List вместо ArrayList.

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

Причиной этого является концепция Программа для интерфейса .Представьте, что вы хотите переключиться с ArrayList на другой тип данных типа List .. Вы можете легко это сделать, не беспокоясь о том, что ваш код теперь не работает.


однако я не уверен, какой будет следующая строка для удовлетворения версии ArrayList

list[i] = new StudentList();

Поскольку list теперь является объектом, вы должны взаимодействовать с ним с помощью методов.В документации оракула для List и ArrayList вы найдете много из них.

Но для этого сценария вам понадобится 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();
    }
}
0 голосов
/ 19 февраля 2019

Вы можете использовать add (int index, E element) , чтобы вставить элемент в указанную позицию.

Таким образом, list[i] = new StudentList(); станет list.add(i, new StudentList());.

Но в вашем случае список еще не заполнен, поэтому вы должны использовать add (E element) , иначе вы получите IndexOutOfBoundsException, потому что индекс будет больше, чем текущий размер списка:

list.add(new StudentList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...