ArrayList 扩容机制和 fail-fast 机制在日常开发中分别容易引发哪些误解?
进阶版来源:Java 后端新手村初级工程师
答案解析
ArrayList 这两个点在面试和日常开发里确实很容易被误解。
先说扩容机制。
ArrayList 底层是数组,默认情况下如果用无参构造创建,内部数组一开始其实是空数组,并不是马上分配 10 个元素空间。第一次 add 的时候才会扩容到默认容量 10。
之后如果容量不够,会按大约 1.5 倍 扩容,也就是 oldCapacity + oldCapacity 1。扩容本质上是创建一个更大的新数组,然后把旧数组里的元素拷贝过去,所以它不是完全无成本的。
日常开发里比较常见的误解有几个:
误以为 ArrayList 每次 add 都会扩容。 其实只有容量不足时才扩容,普通 add 只是往数组下标位置赋值。 误以为默认容量创建时就是 10。 无参构造下不是立刻创建长度为 10 的数组,而是第一次插入元素时才扩到 10。 误以为扩容是 2 倍。 ArrayList 通常是 1.5 倍扩容,不是 HashMap 那种常见的 2 倍扩容。 误以为设置初始容量会改变 size。 比如 `new ArrayList
登录后查看完整内容
