Collection & List接口

AI-摘要
LNotes-AI GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
Collection & List接口
Liuxz代码中使用的Vector、ArrayList、Stack、LinkedList均属于 Java 集合框架中的List 接口实现类(Stack继承自Vector),它们都实现了Collection接口的所有方法,因此基础功能一致。但由于底层数据结构不同,它们在特性和适用场景上存在差异。以下是它们的对比整理:
一、共性(均实现 Collection/List 接口)
所有类都支持以下核心方法(来自Collection和List接口):
| 方法分类 | 核心方法 |
|---|---|
| 添加元素 | add(E e)、addAll(Collection<? extends E> c) |
| 删除元素 | remove(Object o)、removeAll(Collection<?> c)、clear()、remove(int index)(List 特有) |
| 查询判断 | contains(Object o)、containsAll(Collection<?> c)、size()、isEmpty() |
| 交集操作 | retainAll(Collection<?> c) |
| 遍历 / 转换 | iterator()、toArray()、get(int index)(List 特有,按索引访问) |
二、特性差异(底层结构与核心区别)
| 集合类 | 底层数据结构 | 线程安全性 | 读写效率特点 | 特有方法(部分) | 适用场景 |
|---|---|---|---|---|---|
| Vector | 动态数组(数组) | 线程安全(方法加锁) | 增删效率低(需扩容 / 移位),查询效率高(索引访问) | addElement(E obj)、elementAt(int index) |
多线程环境,需线程安全时 |
| ArrayList | 动态数组(数组) | 线程不安全 | 增删效率低(同 Vector),查询效率高 | 无特有方法(完全实现 List 接口) | 单线程环境,查询操作频繁时 |
| Stack | 动态数组(继承 Vector) | 线程安全 | 基于栈结构(LIFO),尾部操作效率高 | push(E item)、pop()、peek() |
需要栈结构(先进后出)操作时 |
| LinkedList | 双向链表 | 线程不安全 | 增删效率高(无需移位),查询效率低(需遍历) | addFirst(E e)、addLast(E e)、removeFirst() |
增删操作频繁,尤其是首尾操作 |
三、关键区别总结
- 线程安全:仅
Vector和Stack是线程安全的(方法加synchronized),ArrayList和LinkedList线程不安全。 - 数据结构:
Vector/ArrayList/Stack基于数组,适合随机访问(通过索引快速定位)。LinkedList基于链表,适合频繁插入 / 删除(尤其是首尾位置)。
- 效率:
- 查询频繁选
ArrayList(单线程)或Vector(多线程)。 - 增删频繁选
LinkedList。 - 栈操作选
Stack(或Deque的push/pop,更推荐)。
- 查询频繁选
这些差异决定了它们的适用场景,实际开发中需根据线程安全需求和操作类型(查询 / 增删)选择合适的集合类。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果




