在学习Java过程中,在刷题时总是搞不清楚这三种数据结构的区别,打算写篇文章记录一下
Arrays VS ArrayList
ArrayList VS LinkedList
总结
Arrays VS ArrayList
Arrays | ArrayList | |
---|---|---|
类型 | Java的基本数据类型 | Java集合框架中的一个类,实现了List接口 |
存储内容 | 基本数据类型+对象引用 | 对象引用 |
可变性 | 数组长度创建后不可变 | 长度可变 |
适用场景 | 查询元素会比较快,直接通过索引访问 | 添加或者删除元素,尤其是在末尾操作 |
提供方法 | 操作有限, 排序,访问,修改 | 方法更多,添加,删除,迭代等 |
ArrayList VS LinkedList
ArrayList | LinkedList | |
---|---|---|
实现方式 | 基于动态数组实现 | 基于双向链表实现 |
性能 | 通过索引直接访问,随机访问更快 | 基于链表实现,插入和删除会更快 |
扩容 | 元素达到容量时需要扩容 | 不需要扩容,通过增加节点增加新元素 |
使用场景 | 频繁进行随机访问 | 频繁进行插入和删除 |
总结
- Arrays 基本数据类型 数组大小不可变 提供方法有限
- ArrayList 基于数组实现 增删慢 查询快 线程不安全
- Vector 基于数组实现 增删慢 查询快 线程安全 频繁加锁 释放锁 读写效率低
- LinkedList 基于双链表实现 增删快 查询慢 线程不安全