Arraylist
概念
Arraylist非线程安全 Arraylist 底层使用的是Object数组 ArrayList 采用数组存储,插入和删除元素的时间复杂度受元素位置的影响 ArrayList 支持快速随机访问,就是通过元素的序号快速获取元素对象 ArrayList的空间浪费主要体现在列表的结尾会预留一定的容量空间 Arraylist可变大小的,可以动态的扩容 ArrayList底层是数组,查询快,增删慢LinkedList
概念
LinkedList非线程安全 LinkedList 底层使用的是双向链表 LinkedList 采用链表存储,插入删除元素时间复杂度不受元素位置的影响 LinkedList 在添加和删除元素时比Arraylist性能更好一些 LinkedList 不支持高效的随机元素访问 LinkedList的占用空间更大,因为LinkedList要存放直接后继和直接前驱以及数据 LinkedList底层是链表,查询慢、增删快总结
### 文章总结:《Arraylist 与 LinkedList 的比较》#### ArrayList
- **基本概念**:非线程安全的数据结构,底层基于可变长度的Object数组实现。
- **存储机制**:由于使用数组存储,支持通过元素的序号进行快速随机访问,但插入和删除操作的时间复杂度会受到元素位置的影响,尤其是在数组开头或结尾外的位置。
- **性能特点**:
- **优点**:快速随机访问,动态扩容以适应存储需要。
- **缺点**:插入和删除效率相对较低,尤其是在数组中间位置;空间利用率不高,列表尾部会预留一定空间。
- **使用场景**:适用于频繁访问元素且较少进行插入和删除操作的场景。
#### LinkedList
- **基本概念**:同样是非线程安全的数据结构,但底层基于双向链表实现。
- **存储机制**:使用链表存储,使得在任何位置插入或删除元素的时间复杂度都保持相对稳定,且不受元素位置的影响。
- **性能特点**:
- **优点**:插入和删除操作效率较高,特别适合在列表中间或任意位置频繁修改的场景。
- **缺点**:不支持通过索引进行高效的随机访问,相比ArrayList,其内存占用更大,因为每个节点都需要存储前驱、后继及数据本身。
- **使用场景**:适用于频繁插入、删除元素且对元素随机访问需求不高的场景。
#### 总结对比
- **访问性能**:ArrayList通过索引访问时更快,LinkedList则较慢。
- **修改(增删)性能**:LinkedList在元素中间或任意位置进行插入删除时效率高于ArrayList。
- **空间效率**:LinkedList由于需要额外的空间存储前驱和后继指针,空间占用通常较ArrayList大;而ArrayList在列表末尾会预留额外空间,空间浪费体现在这一端。
- **选择依据**:根据是否需要频繁进行随机访问以及插入删除操作的频率来选择合适的数据结构。