全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-10 8 分钟 ✍️ juanwangdev

List 接口与实现

List 是 Collection 的子接口,表示有序、可重复的元素序列。

List 接口特点

特性说明
有序元素按插入顺序存储,有索引
可重复允许存储重复元素
可null允许存储 null 元素
索引访问通过索引快速定位元素

List 核心方法

Java
// 添加
list.add(element);              // 尾部添加
list.add(index, element);       // 指定位置插入
list.addAll(otherList);         // 添加另一个集合

// 获取
list.get(index);                // 获取指定位置元素
list.indexOf(element);          // 获取元素首次出现位置
list.lastIndexOf(element);      // 获取元素最后出现位置

// 删除
list.remove(index);             // 删除指定位置元素
list.remove(element);           // 删除首次出现的元素
list.clear();                   // 清空

// 修改
list.set(index, element);       // 替换指定位置元素

// 遍历
list.iterator();                // 获取迭代器
list.listIterator();            // 获取双向迭代器

ArrayList

特点

  • 基于动态数组实现
  • 查询快:索引直接访问 O(1)
  • 插入删除慢:需要移动元素 O(n)
  • 默认容量 10,扩容 1.5 倍

使用示例

Java
List<String> list = new ArrayList<>();

list.add("A");
list.add("B");
list.add("C");

String first = list.get(0);     // "A"
list.set(1, "D");               // 替换为 "D"
list.remove(2);                 // 删除第 2 个

// 遍历
for (String s : list) {
    System.out.println(s);
}

// 函数式遍历(Java 8+)
list.forEach(System.out::println);

扩容机制:容量不足时扩容为原来的 1.5 倍,可通过 new ArrayList<>(initialCapacity) 设置初始容量避免频繁扩容。

LinkedList

特点

  • 基于双向链表实现
  • 插入删除快:只需修改指针 O(1)
  • 查询慢:需要遍历链表 O(n)
  • 实现 List 和 Deque 接口

使用示例

Java
LinkedList<String> list = new LinkedList<>();

list.add("A");                  // 尾部添加
list.addFirst("B");             // 头部添加
list.addLast("C");              // 尾部添加

String first = list.getFirst(); // 获取头部
String last = list.getLast();   // 获取尾部

list.removeFirst();             // 删除头部
list.removeLast();              // 删除尾部

ArrayList vs LinkedList

操作ArrayListLinkedList
随机访问O(1) 快O(n) 慢
头部插入O(n) 慢O(1) 快
尾部插入O(1) 快O(1) 快
中间插入O(n) 慢O(n) 慢(需遍历定位)
内存占用连续数组,紧凑每元素需存储前后指针

选择原则:频繁随机访问用 ArrayList,频繁头部插入删除用 LinkedList。

Vector

特点

  • ArrayList 的线程安全版本
  • 所有方法 synchronized 同步
  • 性能较低,一般不推荐
Java
List<String> vector = new Vector<>();  // 同步的 ArrayList

替代方案:需要线程安全时,用 Collections.synchronizedList(new ArrayList<>())CopyOnWriteArrayList

要点总结

  • List:有序、可重复、索引访问
  • ArrayList:数组实现,查询快,插入删除慢
  • LinkedList:链表实现,插入删除快,查询慢
  • 频繁查询用 ArrayList,频繁插入删除用 LinkedList
  • Vector 是同步版本,性能低,不推荐
  • 遍历推荐 for-each 或 forEach() 方法

📝 发现内容有误?点击此处直接编辑

← 上一篇 自定义异常
下一篇 → Map 接口与实现
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库