ArrayList-扩容机制

1、扩容机制

  • 扩容是懒惰式的,既没有添加元素前,即使制定了容量,也不会真正创建数组
  • add(Object o ) 首次扩容为10,再次扩容是上次容量的1.5倍
  • addAll(Collection c) 首次扩容为10和十几元素的最大值
  • addAll(Collection c) 再次扩容(有元素时)为元容量的1.5倍和实际元素个数的最大值

fail-fast 和 fail-safe

// fail-fast 一旦发现遍历的同时有其他线程修改,则会立即抛出异常
// fail-safe发现遍历的同时其它线程来修改,应当能有应对策略,例如牺牲一致性来遍历运行完成

  • ArrayList是fail-fast的典型代表,遍历的同时不能修改,尽快报错失败
  • CopyOnWriteArrayList 是 fail-safe 的典型代表,遍历的同时可以修改,原理是读写分离

2、ArrayList 和 LinkedList

* ArrayList

① 基于数组,需要连续的内存
② 随机访问块(根据下标访问元素)
③ 尾部插入、删除性能可以,其他部分插入、删除插入都会移动数据,因此性能会低
④ 可以利用CPU缓存,局部性原理

* LinkedList

① 基于双向链表,无需连续的内存
② 随机访问慢(要沿着链表遍历)
③ 头尾插入删除性能高
④ 占用内存多

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容