java - 我们如何动态分配和增长数组

标签 java arrays word-count

我正在做一个项目,但我不能使用任何现有的 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/

相关文章:

java - Spring 模拟 MVC 单元测试和 Controller 建议

java - 我的java代码在线程 "main"java.lang.ArrayIndexOutOfBoundsException中抛出异常?

hadoop - 线程 “main”中的异常java.io.IOException:命令行中拒绝了权限。 Hadoop

python - 计算 DataFrame 中标记化项目的单词数

java - 在Java中,为什么char ch与String命令不一致?

javascript - 如何创建文本区域字数计数器?

java - 海量IO操作服务器选择哪种技术

java - Guava :ImmutableList.of(E[]) 的最佳实践

java - Java 查询中的 SQL 变量

c - 错误 : variable "string" is not initialized