【发布时间】:2018-05-27 18:36:53
【问题描述】:
假设每个 T 对象都可以实例化为
T tobj = new T(//int value);
因此,要从文件中以空格分隔的整数创建一个 T[ ] 数组,我执行以下操作:
BufferedReader br;
FileReader fr;
int[] arr;
try{
fr = new FileReader(fo); // assume "fo" file name
br = new BufferedReader(fr);
arr = Arrays.stream(br.readLine().split("\\s")).mapToInt(Integer::parseInt).toArray();
}catch(SomeException e){//something else}
T[] tobjarr = new T[arr.length];
for(int i=0; i<arr.length; ++i)){
tobjarr[i] = new T(arr[i]);
}
1.上述方法在时间和空间使用上效率高吗?
2.还有其他方法吗?如果是这样,它与上述方法相比如何?
【问题讨论】:
-
文件中包含多少个整数?关于空间使用,这不会有效,因为整个文件都加载到内存中(假设它是单行)。
-
大量。说 > 10^6
-
我不会说这在今天的标准中很大。您的文件只有几 MB。除非您与数十亿人合作,否则我不会那么担心性能。
-
用
.toArray()代替.mapToObj(T::new).toArray(T[]::new),你可以跳过临时数组和额外的循环。 -
然后您需要部分处理数据。只有在你可以用有限的内存处理它们的大块中。