看看下面的链接:
http://snippetsofjosh.wordpress.com/tag/advantages-and-disadvantages-of-arraylist/
这就是为什么我总是更喜欢使用数组而不是 (Array)Lists 的原因之一。尽管如此,这让我开始思考内存管理和速度。
因此,我得出了以下问题:
当您不知道文件的大小(/条目数)时,从文件中存储数据的最佳方法是什么(其中最佳定义为“最少的计算时间”)
下面,我将介绍 3 种不同的方法,我想知道其中哪一种是最好的以及为什么。为了清楚问题,假设我必须以一个数组结尾。另外,让我们假设 .txt 文件中的每一行只有一个条目(/一个字符串)。另外,为了限制问题的范围,我将把这个问题限制在 Java 上。
假设我们要从名为 的文件中检索以下信息words.txt
:
Hello
I
am
a
test
file
方法1 - 双重和危险
File read = new File("words.txt");
Scanner in = new Scanner(read);
int counter = 0;
while (in.hasNextLine())
{
in.nextLine();
counter++;
}
String[] data = new String[counter];
in = new Scanner(read);
int i = 0;
while (in.hasNextLine())
{
data[i] = in.nextLine();
i++;
}
方法 2 - 清晰但多余
File read = new File("words.txt");
Scanner in = new Scanner(read);
ArrayList<String> temporary = new ArrayList<String>();
while (in.hasNextLine())
{
temporary.add(in.nextLine());
}
String[] data = new String[temporary.size()];
for (int i = 0; i < temporary.size(); i++)
{
data[i] = temporary.get(i);
}
方法 3 - 短而僵硬
File read = new File("words.txt");
FileReader reader = new FileReader(read);
String content = null;
char[] chars = new char[(int) read.length()];
reader.read(chars);
content = new String(chars);
String[] data = content.split(System.getProperty("line.separator"));
reader.close();
如果您有其他方法(甚至更好),请在下面提供。此外,如有必要,请随时调整我的代码。
回答:
将数据存储在数组中的最快方法是以下方法:
File read = new File("words.txt");
Scanner in = new Scanner(read);
ArrayList<String> temporary = new ArrayList<String>();
while (in.hasNextLine()) {
temporary.add(in.nextLine());
}
String[] data = temporary.toArray(new String[temporary.size()]);
对于 Java 7+:
Path loc = Paths.get(URI.create("file:///Users/joe/FileTest.txt"));
List<String> lines = Files.readAllLines(loc, Charset.defaultCharset());
String[] array = lines.toArray(new String[lines.size()]);