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

JAVA中,ArrayList 的扩容机制,含案例

JAVA中,ArrayList 的扩容机制,含案例

在 Java 中,ArrayList 是一个动态数组,它可以根据需要自动增长。当 ArrayList 中的元素数量超过其初始容量时,它会重新分配一个更大的内部数组,然后将现有元素复制到新数组中。这个过程称为扩容。

ArrayList 的扩容机制基于以下几个因素:

  1. ArrayList 对象的初始容量。
  2. ArrayList 对象中的元素数量。
  3. ArrayList 对象的增长因子。

ArrayList 中的元素数量超过初始容量时,ArrayList 将创建一个新的内部数组,并将其大小设置为当前容量的增长因子倍数。默认情况下,增长因子是 1.5,这意味着每次扩容时,ArrayList 的容量将增加原始容量的 1.5 倍。

下面是一个 ArrayList 扩容的示例代码:

javaCopy codeimport java.util.ArrayList;public class ArrayListExample {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>(2); // 初始容量为 2list.add("apple");list.add("banana");list.add("orange"); // 当添加第三个元素时,容量将自动扩展System.out.println("Size: " + list.size()); // 打印 ArrayList 大小System.out.println("Capacity: " + getCapacity(list)); // 打印 ArrayList 容量}public static int getCapacity(ArrayList<?> list) throws Exception {java.lang.reflect.Field field = ArrayList.class.getDeclaredField("elementData");field.setAccessible(true);return ((Object[]) field.get(list)).length;}
}

在上面的示例中,我们创建了一个 ArrayList 对象,并将其初始容量设置为 2。我们添加了三个元素到列表中,当添加第三个元素时,ArrayList 会自动扩容。在打印出列表的大小和容量后,我们可以使用反射 API 获取内部数组的长度,从而确定实际容量。

需要注意的是,ArrayList 的扩容机制可能会影响性能。当 ArrayList 扩容时,它需要重新分配内部数组并复制所有元素,这可能是一个开销较大的操作。为了避免不必要的扩容,可以通过初始化 ArrayList 时设置一个更大的初始容量,或者在添加大量元素之前,先调用 ensureCapacity 方法,手动设置 ArrayList 的容量。

在 Java 中,ArrayList 是一个动态数组,它可以根据需要自动增长。当 ArrayList 中的元素数量超过其初始容量时,它会重新分配一个更大的内部数组,然后将现有元素复制到新数组中。这个过程称为扩容。

ArrayList 的扩容机制基于以下几个因素:

  1. ArrayList 对象的初始容量。
  2. ArrayList 对象中的元素数量。
  3. ArrayList 对象的增长因子。

ArrayList 中的元素数量超过初始容量时,ArrayList 将创建一个新的内部数组,并将其大小设置为当前容量的增长因子倍数。默认情况下,增长因子是 1.5,这意味着每次扩容时,ArrayList 的容量将增加原始容量的 1.5 倍。

下面是一个 ArrayList 扩容的示例代码:

javaCopy codeimport java.util.ArrayList;public class ArrayListExample {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>(2); // 初始容量为 2list.add("apple");list.add("banana");list.add("orange"); // 当添加第三个元素时,容量将自动扩展System.out.println("Size: " + list.size()); // 打印 ArrayList 大小System.out.println("Capacity: " + getCapacity(list)); // 打印 ArrayList 容量}public static int getCapacity(ArrayList<?> list) throws Exception {java.lang.reflect.Field field = ArrayList.class.getDeclaredField("elementData");field.setAccessible(true);return ((Object[]) field.get(list)).length;}
}

在上面的示例中,我们创建了一个 ArrayList 对象,并将其初始容量设置为 2。我们添加了三个元素到列表中,当添加第三个元素时,ArrayList 会自动扩容。在打印出列表的大小和容量后,我们可以使用反射 API 获取内部数组的长度,从而确定实际容量。

需要注意的是,ArrayList 的扩容机制可能会影响性能。当 ArrayList 扩容时,它需要重新分配内部数组并复制所有元素,这可能是一个开销较大的操作。为了避免不必要的扩容,可以通过初始化 ArrayList 时设置一个更大的初始容量,或者在添加大量元素之前,先调用 ensureCapacity 方法,手动设置 ArrayList 的容量。

http://www.lryc.cn/news/23539.html

相关文章:

  • 供应链的有效管理,分析指标有哪些
  • 嵌入式环境配置—VMware 软件安装和虚拟机的创建
  • 阿里前端二面经典手写面试题汇总
  • 【Eye】Fake News Reading on Social Media: An Eye-tracking Study
  • 想学计算机,应该学什么专业?
  • Android逆向之旅—反编译利器Apktool使用教程
  • 色环电阻的阻值如何识别
  • Dataway 让 Spring Boot 不再需要 Controller、Service、DAO、Mapper 简单接口直接开发。
  • C#窗口介绍
  • SpringBoot:SpringBoot整合Junit 和 MyBatis(3)
  • Web自动化测试框架Selenium
  • 大数据系统自检
  • MySQL数据库操作
  • 线程安全实例分析
  • Tomcat源码分析-启动分析(二) Catalina初始化
  • 基础复习第二十二天 泛型的使用
  • 【C++进阶】三、二叉搜索树
  • 电脑系统崩溃怎么修复教程
  • 语义分割数据标注案例分析
  • 回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(多指标评价)
  • 驱动程序开发:Buildroot根文件系统构建并加载驱动文件xxx.ko测试
  • R+VIC模型融合实践技术应用及未来气候变化模型预测
  • 第六章.决策树(Decision Tree)—ID3算法,C4.5算法
  • springboot+pgbouncer+postgres数据库连接池集成方案及问题解决
  • Mysql 常用日期处理函数
  • Pod中容器的健康检查
  • 信贷系统学习总结(5)—— 简单的风控示例(含代码)
  • Java知识复习(四)多线程、并发编程
  • 一个9个月测试经验的人,居然在面试时跟我要18K,我都被他吓到了····
  • zigbee与WIFI同频干扰问题