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 的扩容源码,其实本质上就是新建一个足够大的数组,再把旧的数组的内容放进去。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 Pwm双极模式H桥驱动控制电机
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题