【问题标题】:Why Array is Static, whereas ArrayList is Dynamic? [duplicate]为什么 Array 是静态的,而 ArrayList 是动态的? [复制]
【发布时间】:2021-02-27 09:52:40
【问题描述】:

我从Array in Java 的一篇帖子中了解到ArrayList 是动态的,而数组在Java 中是静态的。

那么如果我想修改一个数组的大小,是不是不行呢?有什么解决办法吗?

【问题讨论】:

    标签: java arrays arraylist


    【解决方案1】:

    Java Array 对象的大小是固定的。在ArrayList 内部,有一个Array,它的大小也是固定的,但是当您向列表中添加更多项目时,ArrayList 类会自动创建一个更大的内部Array,然后将元素复制到其中.

    如果您想同时拥有灵活的大小和类似数组的行为,那么ArrayList 是一个不错的选择。如果有时您想获得更大的数组,那么您基本上必须做ArrayList 所做的事情:创建一个更大的数组并复制现有元素。

    总体而言,Array 对于您希望非常有效地访问固定大小的数据集的某些情况很有用。当您认为它可能会改变大小时,您应该考虑使用其他更灵活的集合类。

    【讨论】:

    • 感谢指出错误
    【解决方案2】:

    具有固定长度的数组是语言的工作方式。

    最终,诸如集合之类的所有结构都有一个(固定长度)数组,即使是 ArrayList,但如果它需要增长到超出其当前容量,它的方法会丢弃内部数组并用更大的数组替换它。

    需要分配内存,为此您需要知道多少,为此您需要固定大小。

    【讨论】:

      【解决方案3】:

      在许多现代语言中,数组是静态的,而列表和/或向量是动态的,因为有时您需要静态数据结构,有时您需要动态数据结构 :)

      当然有一种解决方法,但它效率很低且毫无意义,因为您可以随时使用动态数据结构。

      您可以创建下一个大小的新数组,并将前一个数组中的所有数据复制到新数组中。然后将新数组设置为旧数组。

      【讨论】:

        【解决方案4】:

        数组在 Java 中是静态大小的,即使在创建时也必须给出数组大小(或初始大小)。

        如果该原语跨越数组的大小,则将使用默认值初始化基元数组,而包装器/对象数组将使用其所有元素的空值初始化。

        在 Java 中调整数组大小意味着手动创建所需大小的新数组,并有选择地从旧数组中添加元素。

        (甚至 arraylist 也会根据其指标在后台手动调整大小)。

        【讨论】:

          【解决方案5】:

          ArrayList 是只能存储对象数据类型,是一个对象类型。数组是引用类型。 Array 不具备调整其大小的能力,但 ArrayList 类型可以做到这一点。

          【讨论】:

          • 实际上在 Java 中数组是引用类型和 not 原始类型。此外,为了改进您的答案,您可能想澄清“调用数据类型”的含义,因为问题中没有提到任何调用。干杯。
          • 我已经记下了更正并编辑了我的答案
          猜你喜欢
          • 1970-01-01
          • 2013-03-31
          • 1970-01-01
          • 2013-09-18
          • 2012-03-15
          • 2014-09-27
          • 2012-04-08
          • 1970-01-01
          相关资源
          最近更新 更多