Java进阶之单列集合List接口下的通用方法
Java 集合框架中的 List
接口是最常用的集合类型之一,它代表一个有序的集合(序列)。它允许元素重复,并通过索引精确控制每个元素插入的位置,并可以通过索引访问元素。
一.List 接口概述
1.List 接口的核心概念
- 有序集合 (Ordered Collection): 这是
List
最根本的特性。它维护元素的特定插入顺序。当你向List
中添加元素时,每个元素都会被放置在一个特定的位置(索引)。你可以通过元素的整数索引(从 0 开始)精确地访问、搜索、插入或删除该位置的元素。存和取的元素顺序一致。 - 可重复元素 (Allows Duplicates):
List
允许存储重复的元素。同一个对象可以在列表中多次出现。 - 继承自
Collection
:List
接口继承自Collection
接口,因此它包含了Collection
的所有基本操作(添加、删除、遍历、判断包含等),并在此基础上添加了大量基于索引的操作。 - 允许
null
元素: 大多数List
的实现(如ArrayList
,LinkedList
)允许存储null
元素。
2.List集合的特有方法
方法名 | 说明 |
---|---|
add(int index, E e) | 在指定位置插入元素 |
get(int index) | 返回指定位置的元素 |
set(int index, E e) | 替换指定位置的元素 |
remove(int index) | 删除指定位置的元素 |
indexOf(Object o) | 返回元素首次出现的索引(未找到返回-1) |
lastIndexOf(Object o) | 返回元素最后一次出现的索引 |
size() | 返回列表中元素的数量 |
完整示例代码:
import java.util.ArrayList;
import java.util.List;public class ListOperations {public static void main(String[] args) {// 初始化列表List<String> list = new ArrayList<>();list.add("apple");list.add("banana");list.add("cherry");list.add("date");list.add("elderberry");// 1. 在索引1插入"grape"list.add(1, "grape");System.out.println("1. 插入 grap: " + list);// 2. 在索引3插入"fig"list.add(3, "fig");System.out.println("2. 插入 fig: " + list);// 3. 替换索引2为"kiwi"list.set(2, "kiwi");System.out.println("3. 替换 kiwi: " + list);// 4. 删除索引4list.remove(4);System.out.println("4. 删除索引4: " + list);// 5. 查找"date"的索引int indexOfDate = list.indexOf("date");System.out.println("5. date的索引: " + indexOfDate + " | 当前列表: " + list);// 6. 在索引0插入"apple"list.add(0, "apple");System.out.println("6. 头部插入apple: " + list);// 7. 查找最后一个"apple"的索引int lastIndexOfApple = list.lastIndexOf("apple");System.out.println("7. 最后一个apple的索引: " + lastIndexOfApple + " | 当前列表: " + list);// 8. 输出列表大小int size = list.size();System.out.println("8. 列表大小: " + size);// 最终列表System.out.println("最终列表: " + list);}
}
运行结果:
注意事项:
注意在使用remove时有两个重载函数,一个是按照索引删除,一个是按照对象删除。
public class test {public static void main(String[] args) {Collection<Integer> c = new ArrayList<Integer>();c.add(1);c.add(2);c.add(3);System.out.println(c);c.remove(1);System.out.println(c);List<Integer> c1 = new ArrayList<Integer>();c1.add(1);c1.add(2);c1.add(3);boolean remove1 = c1.remove((Integer) 2);Integer remove = c1.remove(1);System.out.println(c1);}
}
3.List集合的遍历方式
在Java中,遍历List
集合主要有以下五种方式,每种方式都有其适用场景,以下只详细介绍常见的两种,因为List接口继承于单列集合接口Collection接口,所以所有的单列集合都能使用的迭代器等三种遍历方式在List中也可以使用,大家可以看博主前几期的博文Java学习Collection单列集合中的三种通用遍历方法,这三种方法这里只做代码展示。
(1). 普通for循环
for (int i = 0; i < list.size(); i++) {String item = list.get(i);System.out.println(item);
}
特点:
- 通过索引访问元素
- 适合
ArrayList
等随机访问集合 - 不适用于
LinkedList
(get(i)
效率低) - 可在循环内修改集合(需谨慎)
(2).ListIterator(双向迭代器)
ListIterator<String> lit = list.listIterator();
while (lit.hasNext()) {String item = lit.next();System.out.println(item);
}// 反向遍历(需先正向遍历到末尾)
while (lit.hasPrevious()) {String item = lit.previous();System.out.println(item);
}
特点:
- 支持双向遍历
- 可添加/替换元素(
lit.add()
,lit.set()
) - 可安全删除元素(
lit.remove()
)
(3).单列集合的三种方式
迭代器:
Iterator<String> it = list.iterator();
while (it.hasNext()) {String item = it.next();System.out.println(item);
}
增强for循环(foreach):
for (String item : list) {System.out.println(item);
}
forEach()方法--lambda表达式
list.forEach(item -> System.out.println(item));
// 方法引用简化
list.forEach(System.out::println);