当前位置: 首页 > news >正文

中国建设银行官方网站k宝驱动wordpress小工具导入

中国建设银行官方网站k宝驱动,wordpress小工具导入,律师网站建设模板,网站安全证书存在问题1.是什么 ArrayList 是 Java 中的动态数组类,它的底层实现是一个可以自动扩展的数组。ArrayList 的扩容机制是其最重要的特性之一,因为它使得开发者无需关心数组的大小。以下是 ArrayList 扩容机制的详细解释: 1. 初始容量 当创建 ArrayList…

1.是什么

     ArrayList 是 Java 中的动态数组类,它的底层实现是一个可以自动扩展的数组。ArrayList 的扩容机制是其最重要的特性之一,因为它使得开发者无需关心数组的大小。以下是 ArrayList 扩容机制的详细解释:


1. 初始容量

当创建 ArrayList 时,默认情况下它会有一个初始容量。这个初始容量可以通过构造函数指定:

  • ArrayList():默认容量是 10
  • ArrayList(int initialCapacity):使用用户指定的初始容量。

2. 添加元素时的扩容

当向 ArrayList 添加元素时,如果当前元素的数量超过了数组的容量,ArrayList 需要进行扩容。扩容的核心逻辑发生在 add() 方法中。扩容的步骤可以概括为:

  1. 检查当前容量:在添加元素前,ArrayList 会检查当前底层数组的容量是否足够容纳新的元素。
  2. 扩容逻辑:如果容量不足,则触发扩容机制。ArrayList 的扩容策略是按照 1.5 倍的方式进行扩容。具体来说,新容量 = 旧容量 + (旧容量 >> 1),即新容量是旧容量的 1.5 倍。
  3. 复制数组ArrayList 会创建一个新的数组,将原数组中的所有元素复制到新数组中,释放旧数组的内存。
  4. 添加元素:完成扩容后,元素被添加到新的数组中。

3. 源码分析

我们通过源码进一步了解 ArrayList 的扩容机制。这里的示例是基于 JDK 8 的 ArrayList 源码。

public boolean add(E e) {ensureCapacityInternal(size + 1);  // 确保容量足够elementData[size++] = e;           // 添加元素return true;
}private void ensureCapacityInternal(int minCapacity) {// 如果没有初始化数组,则将默认容量与需要的最小容量进行比较if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);}ensureExplicitCapacity(minCapacity);
}private void ensureExplicitCapacity(int minCapacity) {modCount++;// 扩容条件:当最小容量大于当前数组容量时if (minCapacity - elementData.length > 0)grow(minCapacity);
}private void grow(int minCapacity) {// 旧容量int oldCapacity = elementData.length;// 新容量 = 旧容量的 1.5 倍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);
}private static int hugeCapacity(int minCapacity) {if (minCapacity < 0) // overflowthrow new OutOfMemoryError();return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE;
}

4. 扩容示例

假设我们创建一个默认容量为 10ArrayList,并向其中不断添加元素,扩容过程如下:

  1. 初始容量为 10
  2. 当添加第 11 个元素时,触发扩容。此时,旧容量为 10,新容量为 10 + 10/2 = 15,扩容到 15
  3. 当添加第 16 个元素时,再次触发扩容。旧容量为 15,新容量为 15 + 15/2 = 22,扩容到 22
  4. 依次类推,后续每当容量不足时,ArrayList 按照 1.5 倍的速率扩容。

5. 扩容的性能影响

  • 扩容代价:扩容的代价主要来自于数组的复制操作,尤其是在数组较大的情况下,复制操作会占用较多的时间。每次扩容时,ArrayList 需要分配新的数组并将旧数组的数据复制到新数组中。
  • 避免频繁扩容:如果能够提前预估 ArrayList 的大小,建议在创建时指定合适的初始容量(通过 ArrayList(int initialCapacity) 构造函数)。这样可以减少扩容次数,提高性能。

6. 总结

    ArrayList 的扩容机制通过按 1.5 倍的方式增长容量来处理动态数据的添加,保证了使用的便捷性和一定的性能优化。但扩容过程中由于涉及数组复制,会引入一定的开销。因此,合理设置初始容量可以避免频繁的扩容操作,提升效率。

http://www.dtcms.com/a/451619.html

相关文章:

  • 合肥网站建设推荐 晨飞网络一键免费搭建手机网站
  • 2网站免费建站三亚城乡建设局网站
  • 平台型网站开发企业网站的短视频中心模板
  • 浙江政务服务网seo优化工具的种类
  • 大城网站建设客户管理系统
  • 网站定制开发建设网站建设 有哪些费用
  • 南昌网站网页设计汉南城乡建设局网站
  • 廊坊网站建设咨询青橙网络潍坊奎文住房和城乡建设局网站
  • 婚纱摄影行业网站建设北京商场有哪些地方
  • 百度关键词优化公司无锡企业网站seo
  • 一个网站的建设成本给wordpress添加小图标
  • 网站做301还是302免费seo技术教程
  • 家谱网站的首页怎么做电子商务专业是个坑吗
  • wordpress站下所有标签修改wordpress ftp端口
  • 新手做网站怎么上传系统绍兴网站制作网站
  • 中小微企业查询网站seo推广系统排名榜
  • 照片素材库网站免费只用html5可以做网站吗
  • 云服务器网站文件夹网页设计行业市场分析
  • 企业建站系统平台国外知名网站
  • 南宁致峰网站建设吕梁建设机械网站
  • 免费微网站系统源码泰然建设网站
  • 中国建筑土木建设有限公司网站提供邢台专业做网站
  • 室内设计网站界面河北邢台wap网站建设
  • 网站目录结构模板wordpress备份整站
  • 北京建设网站公司用vs2010做网站导航
  • 东莞网页制作免费网站制作h5怎么生成二维码
  • 网站建设移交内容惠州惠城网站建设
  • 医院网站建设的目标app开发公司定制小程序
  • 工信部查网站备案微信软文范例
  • 如何搭建网站服务器新媒体营销案例