重月雀 2021-04-15 09:14 采纳率: 100%
浏览 165
已采纳

Java中,既然数组的长度不可变,那么为什么能够扩容?

Java中规定,数组一旦创建,数组的长度便不可变,那么为什么能够扩容?

  • 写回答

7条回答 默认 最新

  • CSDN专家-三岁丫 2021-04-15 09:49
    关注
      private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        // oldCapacity >> 1 新的容量比原来的要多一半
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        // 如果计算出来新的容量还是比需要的少,那么就取需要的长度为新的长度
        if (newCapacity - minCapacity < 0)
          newCapacity = minCapacity;
        // 如果新的容量已经超过最大限制了,那么就取 Integer.MAX_VALUE
        if (newCapacity - MAX_ARRAY_SIZE > 0)
          newCapacity = hugeCapacity(minCapacity);
        // 将原来数组中的内容拷贝到新的数组,然后设置为当前 ArrayList 的容器
        elementData = Arrays.copyOf(elementData, newCapacity);
      }

    这个是 ArrayList 的扩容源码,其实本质上就是新建一个足够大的数组,再把旧的数组的内容放进去。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 Pwm双极模式H桥驱动控制电机
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题