Collection & List接口

代码中使用的VectorArrayListStackLinkedList均属于 Java 集合框架中的List 接口实现类Stack继承自Vector),它们都实现了Collection接口的所有方法,因此基础功能一致。但由于底层数据结构不同,它们在特性和适用场景上存在差异。以下是它们的对比整理:

一、共性(均实现 Collection/List 接口)

所有类都支持以下核心方法(来自CollectionList接口):

方法分类 核心方法
添加元素 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() 增删操作频繁,尤其是首尾操作

三、关键区别总结

  1. 线程安全:仅VectorStack是线程安全的(方法加synchronized),ArrayListLinkedList线程不安全。
  2. 数据结构
    • Vector/ArrayList/Stack基于数组,适合随机访问(通过索引快速定位)。
    • LinkedList基于链表,适合频繁插入 / 删除(尤其是首尾位置)。
  3. 效率
    • 查询频繁选ArrayList(单线程)或Vector(多线程)。
    • 增删频繁选LinkedList
    • 栈操作选Stack(或Dequepush/pop,更推荐)。

这些差异决定了它们的适用场景,实际开发中需根据线程安全需求和操作类型(查询 / 增删)选择合适的集合类。