当前位置: 首页 > 面试题库 >

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

黄宏毅
2023-03-14
问题内容

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

除了它是一行代码而不是三行代码。:)



 类似资料:
  • 为了便于示例,让我们定义一个玩具自动机类型: 这种结构被设计成通过循环,我们可以将每个想象成一个具有成功和失败转换到其他状态的状态。因此有限自动机必须递归定义。例如,这里是最简单的自动机: 它由1个总是过渡到自身的状态组成。如果我们愿意,我们可以制造更复杂的自动机: 这些不错。但是接受用户输入并构建一个自动机可能会很好。例如,也许可以从过渡矩阵中构建一个。这里有一个天真的实现: 然而,当我们尝试这

  • 问题内容: 我想知道在React / React- Native中部分更新组件状态的最佳方法是什么。除了我可以使函数获取当前状态并创建新状态并合并新的{key:value}和先前状态的事实。例如: 我想将last_name更新为另一个值。当我调用时 ,它将formData词典重置为姓:new Value。有办法有效地做到这一点吗? 问题答案: 我认为您可以尝试两种方法: 点差运算符 如此 要么 获

  • 我尝试过创建循环,比如减去用户想要购买的物品的数量,同时计算取值时的模数为0,减去用户购买的数量,但我离它还很远。 数组来自其他方法: 是商品的价格是用户购买的商品数量是用户对折扣的选择,例如,用户可以将折扣设置为2包、3包甚至无。

  • 问题内容: 我有一个快速的问题。我在java中有一个整数数组,需要它的长度在整个类中变化。具体来说,在某些情况下,我需要将其增加一。我这样尝试过。 我会在需要时增加整数变量numberOfSBG,但我认为这不起作用。还有其他办法吗? 问题答案: 我建议您使用ArrayList,因为您不必担心长度。创建后,您将无法修改数组大小: 数组是一个包含固定数量的单一类型值的容器对象。创建数组时将确定数组的长

  • 在V9.0.0版本之前为下列对象分配内存采用动态的方式,在之后的版本才允许应用程序开发者自己静态的分配内存; 任务 软件定时器 队列 事件组 二值信号量 计数信号量 递归信号量 互斥量 当然,具体使用静态分配还是动态分配由开发者自己决定。 动态分配 动态分配的好处在于使用灵活简单、同时潜在的可以降低内存占用。 更少的函数参数 内存分配使用RTOS提供的API自动分配 应用程序开发者不需要自己去考虑

  • 我有以下问题: 示例: 输入:[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]输出:6顺序:[0,2,6,9,13,15]或[0,4,6,9,11,15]或[0,4,6,9,11,15] 这是一个DP问题,我确实有一些问题在记忆步骤。下面是我的代码: 多谢了。