Java List 集合详解:索引操作与遍历方式全解析

List 作为 Collection 的重要子接口,因具备有序、可重复、有索引的特性,在 Java 开发中被广泛使用。它不仅继承了 Collection 的所有方法,还新增了一系列基于索引的操作,让元素操作更灵活。本文将详细介绍 List 集合的核心方法及五种遍历方式,帮助你熟练掌握其用法。

一、List 集合的核心特性

与 Set 系列集合相比,List 的独特之处在于:

  • 有序性:元素的存储顺序与取出顺序完全一致
  • 可重复性:允许存储相同的元素(通过equals()判断)
  • 索引支持:元素有明确的位置索引(从 0 开始),可通过索引直接操作元素

常见实现类:ArrayList(数组实现,查询快)、LinkedList(链表实现,增删快)、Vector(线程安全,效率较低)。

二、List 独有的索引操作方法

由于支持索引,List 新增了一系列通过索引操作元素的方法,这是其与其他 Collection 子接口的核心区别:

方法功能示例
add(int index, E element)在指定索引插入元素list.add(1, "插入元素") → 索引 1 处插入新元素,后续元素后移
remove(int index)删除指定索引元素,返回被删除元素String removed = list.remove(0) → 删除索引 0 的元素
set(int index, E element)替换指定索引元素,返回被替换元素String old = list.set(2, "新值") → 替换索引 2 的元素
get(int index)获取指定索引的元素String elem = list.get(1) → 获取索引 1 的元素

代码示例

List<String> list = new ArrayList<>();
list.add("牢大");
list.add("牢二");
list.add("牢三");
System.out.println(list); // [牢大, 牢二, 牢三]

// 插入元素(索引1处)
list.add(1, "我是插入的");
System.out.println(list); // [牢大, 我是插入的, 牢二, 牢三]

// 删除索引1的元素
list.remove(1);
System.out.println(list); // [牢大, 牢二, 牢三]

// 替换索引0的元素
list.set(0, "我是替换的");
System.out.println(list); // [我是替换的, 牢二, 牢三]

// 获取索引0的元素
System.out.println(list.get(0)); // 我是替换的

三、List 集合的五种遍历方式

List 支持多种遍历方式,适用于不同场景,以下是详细说明:

1. 迭代器(Iterator)遍历

继承自 Collection 的通用遍历方式,通过iterator()获取迭代器对象:

Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String s = it.next(); // 获取元素并移动指针
    System.out.println(s);
}

特点:可在遍历中通过it.remove()删除元素,适用于需要删除操作的场景。

2. 列表迭代器(ListIterator)遍历

List 独有的迭代器,支持向前 / 向后遍历添加元素

ListIterator<String> lit = list.listIterator();
while (lit.hasNext()) { // 向后遍历
    String s = lit.next();
    System.out.println(s);
}

// 额外支持向前遍历(需先移动到末尾)
while (lit.hasPrevious()) {
    String s = lit.previous();
    System.out.println(s);
}

优势:可在遍历中通过lit.add(E e)添加元素,功能比普通迭代器更丰富。

3. 增强 for 循环遍历

简化版迭代器,语法简洁,适合仅需读取元素的场景:

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

注意:遍历中不能修改集合结构(添加 / 删除元素),否则会抛出异常。

4. Lambda 表达式遍历

JDK8 + 新增的遍历方式,代码最简洁,体现函数式编程思想:

list.forEach(s -> System.out.println(s));

适用场景:简单遍历逻辑,无需复杂操作时优先使用。

5. 普通 for 循环遍历

利用索引遍历,适合需要操作索引的场景:

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i)); // 通过get(i)获取元素
}

优势:可通过索引灵活控制遍历顺序(如倒序遍历),支持中途修改索引值。

四、总结

List 集合因支持索引而具备极高的灵活性,其独有的add(int index)remove(int index)set(int index)get(int index)方法让元素操作更精准。五种遍历方式各有侧重:

  • 需修改集合(增删元素)→ 用ListIterator
  • 简单读取 → 用增强 for 循环或 Lambda 表达式
  • 依赖索引操作 → 用普通 for 循环
  • 通用遍历 → 用Iterator
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值