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 删除。