Java ArrayList和 LinkedList的区别
ArrayList的基本特点
- 线程不同步
- 基于动态数组的数据结构
- 初始化大小默认10个元素, 如预先知道大小也可以初始化时手动设置 List a = new ArrayList<>(3);能节省扩容的性能开支(动态自动扩容规则: 扩容后的大小 = 原始大小 + 原始大小 / 2 + 1. 例: 原始大小10, 扩容后的大小是10 + 5 + 1 = 16)
ArrayList的优点与缺点
- 因为是数组形式 可通过查询数组下标的形式访问数组元素还有尾部添加新元素时效率高, 所以相关性能优于 LinkedList
- 但是删除数组中的数据以及向数组中间添加数据效率低, 因为需要移动数组. 例如: 删除第一个数组元素, 则需要将第2至第n个数组元素各向前移动一位
- 如果预先不设置大小可能会有空间浪费
LinkedList的基本特点
- 线程不同步
- 基于链表的数据结构
- 没有初始化大小, 也没有扩容的机制
LinkedList的优点与缺点
- 新增和删除元素时因只需改变指针指向, 所以相关效率优于 ArrayList
- 但是查询元素时需要对链表进行遍历, 所以相关性能低于 ArrayList, 还有 LinkedList不支持高效的随机元素访问
总结
- 需要随机访问元素, 只在末尾添加新元素而不在头部或中间还有基本没有删除操作时选择 ArrayList
- 常常有头部或中间添加或删除元素操作时选择 LinkedList
如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!