[英]Best way to read data from a file and store them
我正在從一個學生文件中讀取數據,其中每一行都是一個學生,然后我將該數據轉換為一個學生 object 並且我想返回一個學生對象數組。 我目前通過將每個學生 object 存儲在 arraylist 中然后將其作為標准 Student[] 返回來執行此操作。 使用 arraylist 來獲得動態大小的數組然后將其轉換為標准數組以進行返回是否更好,或者我應該首先計算文件中的行數,制作該大小的 Student[] 然后填充該數組。 或者是否有更好的方法來完全做到這一點。
如果有幫助,這是代碼:
public Student[] readStudents() {
String[] lineData;
ArrayList<Student> students = new ArrayList<>();
while (scanner.hasNextLine()) {
lineData = scanner.nextLine().split(" ");
students.add(new Student(lineData));
}
return students.toArray(new Student[students.size()]);
}
哪個更好取決於你需要什么和你的數據集大小。 需求可能是——最簡單的代碼、最快的加載、最少 memory 的使用、對結果數據集的快速迭代……選項可能是
關於 ArrayList 的注意事項:它首先預分配一個帶有一組槽的數組,然后在沒有 memory 重新分配的情況下填充這些槽。 只要后備數組已滿,就會分配一個新的更大的數組,並將所有元素移入其中。 默認情況下,新數組大小是先前數組大小的兩倍 - 通常這不是問題,但如果新數組無法獲得足夠連續的 memory 塊,可能會導致 memory 不足。
將數組用於固定大小的數組。 對於學生來說情況並非如此,因此 ArrayList 更適合,正如您在閱讀時看到的那樣。 從 ArrayList 到數組的轉換是多余的。
然后,使用最通用的類型,這里是List
接口。 實現, ArrayList
or LinkedList
那么就是一個技術實現問題。 您稍后可能會更改具有其他運行時行為的其他實現。
但是您的代碼可以處理各種List
,這確實是一個強大的概括。
這里有一個不完整的有用接口列表和一些實現
所以:
public List<Student> readStudents() {
List<Student> students = new ArrayList<>();
while (scanner.hasNextLine()) {
String[] lineData = scanner.nextLine().split(" ");
students.add(new Student(lineData));
}
return students;
}
在代碼審查中,人們會評論構造函數Student(String[] lineData)
,這有可能在未來更改數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.