我想把这个程序的数组变成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();
}
}
答案 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的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();
}
}