【大白话说Java面试题】【Java基础篇】第1题:说说ArrayList的底层原理/扩容规则
大厂规范Java项目工具类 — 01_字符串类型转换工具类Java企业级代码第1题说说ArrayList的底层原理/扩容规则回答底层实现ArrayList基于动态数组实现初始底层数组长度取决于构造方式空参构造初始长度为0即elementData为空数组。有参构造直接初始化为指定容量的数组如new ArrayList(20)。扩容规则1. 使用add方法时的扩容规则空参构造首次调用add方法时扩容到默认容量10。后续扩容新容量为上一次容量的1.5倍计算公式为新容量 原容量 (原容量 1)。有参构造直接初始化为指定容量如20。只有当添加的元素数量超过初始容量时才会触发扩容。扩容规则与空参构造一致新容量为上一次容量的1.5倍。2. 使用addAll方法时的扩容规则如果集合原本为空扩容后容量取Math.max(10, 实际元素个数)。如果集合原本有元素扩容后容量取Math.max(原容量1.5倍, 实际元素个数)。面试官视角面试官可能会追问“为什么扩容是1.5倍”答1.5倍是一个折中值既能减少频繁扩容的开销又不会浪费过多内存空间。面试官可能会问“扩容过程中是如何保证线程安全的”答ArrayList本身不是线程安全的扩容时可能会出现并发问题比如多个线程同时扩容导致数据不一致。如果需要线程安全可以使用Collections.synchronizedList或CopyOnWriteArrayList。觉得对您有帮助麻烦点点关注啦/font/bb您的关注是我创作的最大动力