new ArrayList()
时,直接创建长度为 10 的 Object[] elementData
数组,无论是否立即添加元素 new ArrayList()
时,初始化一个空数组 {}
(DEFAULTCAPACITY_EMPTY_ELEMENTDATA
),容量为 0。第一次调用 add()
方法时,才会创建长度为 10 的数组 new ArrayList()
强制分配容量为 10,new ArrayList(0)
则创建空数组 new ArrayList(10)
)时才会直接初始化数组new ArrayList<>(existingList)
),则直接复制集合元素的数组,避免冗余扩容 oldCapacity + (oldCapacity >> 1)
)扩容,并将旧数组元素复制到新数组 size + 1 > elementData.length
),触发扩容 add()
时才会初始化数组,避免了无参构造场景下的无效内存占用 new ArrayList(100)
),减少扩容次数以提升性能 <!--br {mso-data-placement:same-cell;}--> td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}
维度 | JDK 1.7 | JDK 1.8 |
---|---|---|
初始化策略 | 预分配内存(可能浪费资源) | 按需分配内存(节省内存) |
扩容频率 | 可能因预分配容量较高而减少扩容次数 | 首次添加元素必扩容,后续扩容频率相同 |
适用场景 | 需立即添加大量元素的场景 | 内存敏感型场景或延迟初始化需求 |
ensureCapacity()
预扩容原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。