我正在做一个项目,但我不能使用任何现有的 java 数据结构(即 ArraysList、树等)
我只能使用数组。因此,我需要用新内存动态更新数组。
我正在从一个文本文件中读取,我为数组内存预分配了 100:
String [] wordList;
int wordCount = 0;
int occurrence = 1;
int arraySize = 100;
wordList = new String[arraySize];
while ((strLine = br.readLine()) != null) {
// Store the content into an array
Scanner s = new Scanner(strLine);
while(s.hasNext()) {
wordList[wordCount] = s.next();
wordCount++;
}
}
现在这适用于 100 个以下的列表项。 br.readline 是缓冲阅读器,它遍历文本文件的每一行。我有它,然后将每个单词存储到列表中,然后递增我的索引 (wordCount)。
但是,一旦我有一个包含超过 100 个项目的文本文件,我就会收到分配错误。
我怎样才能动态更新这个数组(从而重新发明轮子)?
谢谢!
最佳答案
你可以这样做:
String [] wordList;
int wordCount = 0;
int occurrence = 1;
int arraySize = 100;
int arrayGrowth = 50;
wordList = new String[arraySize];
while ((strLine = br.readLine()) != null) {
// Store the content into an array
Scanner s = new Scanner(strLine);
while(s.hasNext()) {
if (wordList.length == wordCount) {
// expand list
wordList = Arrays.copyOf(wordList, wordList.length + arrayGrowth);
}
wordList[wordCount] = s.next();
wordCount++;
}
}
使用 java.util.Arrays.copyOf(String[])
基本上做同样的事情:
if (wordList.length == wordCount) {
String[] temp = new String[wordList.length + arrayGrowth];
System.arraycopy(wordList, 0, temp, 0, wordList.length);
wordList = temp;
}
除了它是一行代码而不是三行。 :)
关于java - 我们如何动态分配和增长数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837185/