亚洲天堂成人在线视频_伊人网狠狠干_亚洲精品综合在线观看_国产在线第一页_91最新在线观看_国产亚洲久

【已解决】 ArryList 为什么无法自动扩容至 1.5 倍?

请先 登录 后评论

最佳答案 2024-07-01 00:00

ArrayList?是 Java 中的一个常用集合类,用于动态数组的实现。ArrayList?的底层是一个数组,当数组容量不够时,ArrayList?会自动扩容以容纳更多的元素。

在大多数情况下,ArrayList?扩容时会将容量增加到原先容量的 1.5 倍左右,但实际上并不是精确的 1.5 倍。具体的扩容机制可以从?ArrayList?的源码中看到:

private void grow(int minCapacity) {
    // 获取旧的容量
    int oldCapacity = elementData.length;
    // 新容量为旧容量的 1.5 倍(实际上是 oldCapacity + (oldCapacity >> 1))
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    // 如果新容量仍然小于最小需求容量,则将新容量设置为最小需求容量
    if (newCapacity - minCapacity < 0)
        newCapacity = minCapacity;
    // 如果新容量超出了数组的最大容量,则处理溢出情况
    if (newCapacity - MAX_ARRAY_SIZE > 0)
        newCapacity = hugeCapacity(minCapacity);
    // 复制旧数组到新数组
    elementData = Arrays.copyOf(elementData, newCapacity);
}

从上面的代码可以看到,ArrayList?的扩容机制是将旧容量右移一位(相当于除以 2),然后加上旧容量,这样新容量大约是旧容量的 1.5 倍。

但是由于整数运算的原因,新容量并不总是精确的 1.5 倍。例如,如果旧容量是 10,那么新容量将是 10 + (10 >> 1) = 10 + 5 = 15,这正好是 1.5 倍。但如果旧容量是 11,那么新容量将是 11 + (11 >> 1) = 11 + 5 = 16,这并不是精确的 1.5 倍。

总结来说,ArrayList?的扩容机制是近似 1.5 倍,但由于整数运算的原因,不能保证每次扩容都是精确的 1.5 倍。

请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 0 收藏,95 浏览
  • 匿名 提出于 2024-06-28 15:45

扫码关注微信公众号

QAQ9问答官方公众号
主站蜘蛛池模板: 国产精品成人免费观看 | 亚洲av永久无码精品三区在线4 | 中文字幕亚洲一区二区三区 | 午夜激情福利视频 | r级无码视频在线观看 | 日韩精品一区二区亚洲av观看 | 中文国产成人精品久久水 | 含紧一点h边做边走动免费视频 | 中文字幕一区二区三区乱码 | 亚洲一线二线三线写真 | 777kkk亚洲综合欧美色老头 | 久久夜色精品国产亚洲噜噜 | 精品久久久久亚洲 | 色噜噜狠狠狠综合曰曰曰88av | h成人在线 | 蜜桃一区二区三区 | 麻豆国产免费影片 | 嫩草影院在线观看未满十八 | 国产成人精品无码a区在线观看 | 亚洲精品九色在线网站 | 久久有这有精品在线观看 | 久久精品视频5 | 欧美性猛交xxxx乱大交极品 | 久久黄色小视频 | 草草影院www色极品欧美 | 国产精品久久久久久久久免费 | 国产免费人成视频在线观看 | 国产精品亚洲高清一区二区 | 久久91久久91精品免费观看 | 一边摸一边做爽的视频17国产 | 亚洲人成在线中文字幕 | 日韩夜夜操 | 玖玖精品在线 | 亚洲精品一区 | 26uuu亚洲影视新地址 | 一区国严二区亚洲三区 | 日本毛片在线 | 国产福利一区二区三区四区 | 亚洲高清视频免费 | 99久热这里只有精品免费 | 亚洲av无码精品色午夜果冻不卡 |