Java.util包之Java.util.List接口

发布于:2025-03-28 ⋅ 阅读:(29) ⋅ 点赞:(0)

Java.util.List 使用详解

java.util.List 是 Java 集合框架中最常用的接口之一,它表示一个有序的集合(也称为序列)。下面我将详细介绍 List 的使用方法,包括创建、操作和最佳实践。

一、List 的创建

1. 使用具体实现类创建

// ArrayList - 基于动态数组
List<String> arrayList = new ArrayList<>();

// LinkedList - 基于链表
List<Integer> linkedList = new LinkedList<>();

// Vector - 线程安全的动态数组(已过时,不推荐新代码使用)
List<Double> vector = new Vector<>();

2. 使用工具方法创建

// Arrays.asList - 固定大小的List(不能添加/删除)
List<String> fixedList = Arrays.asList("A", "B", "C");

// List.of (Java 9+) - 不可变List
List<String> immutableList = List.of("A", "B", "C");

// Collections.nCopies - 创建包含n个相同元素的List
List<String> repeated = Collections.nCopies(3, "Hello");

二、基本操作

1. 添加元素

List<String> fruits = new ArrayList<>();

// 添加单个元素
fruits.add("Apple");
fruits.add("Banana");

// 在指定位置插入
fruits.add(1, "Orange"); // ["Apple", "Orange", "Banana"]

// 添加多个元素
fruits.addAll(Arrays.asList("Grape", "Mango"));

2. 访问元素

// 获取元素
String first = fruits.get(0); // "Apple"

// 检查元素是否存在
boolean hasApple = fruits.contains("Apple"); // true

// 查找元素位置
int index = fruits.indexOf("Banana"); // 2
int lastIndex = fruits.lastIndexOf("Apple"); // 0

3. 修改元素

// 修改指定位置元素
fruits.set(1, "Cherry"); // ["Apple", "Cherry", "Banana", "Grape", "Mango"]

// 批量替换 (Java 8+)
fruits.replaceAll(String::toUpperCase); // ["APPLE", "CHERRY", "BANANA", "GRAPE", "MANGO"]

4. 删除元素

// 按索引删除
fruits.remove(0); // 移除 "APPLE"

// 按值删除
fruits.remove("CHERRY"); // 返回true表示成功

// 条件删除 (Java 8+)
fruits.removeIf(f -> f.startsWith("B")); // 删除所有B开头的元素

// 清空List
fruits.clear();

三、遍历操作

1. 基本遍历方式

// 1. for循环
for (int i = 0; i < fruits.size(); i++) {
    System.out.println(fruits.get(i));
}

// 2. 增强for循环
for (String fruit : fruits) {
    System.out.println(fruit);
}

// 3. 迭代器
Iterator<String> it = fruits.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

// 4. ListIterator (可双向遍历)
ListIterator<String> lit = fruits.listIterator();
while (lit.hasNext()) {
    System.out.println(lit.next());
}

2. Java 8+ 流式遍历

// 简单遍历
fruits.forEach(System.out::println);

// 使用Stream API
fruits.stream()
      .filter(f -> f.length() > 5)
      .map(String::toLowerCase)
      .forEach(System.out::println);

四、常用工具方法

1. 排序

// 自然排序
Collections.sort(fruits); // 按字母顺序

// 自定义排序
fruits.sort((a, b) -> b.compareTo(a)); // 降序

// 对象排序
List<Person> people = new ArrayList<>();
people.sort(Comparator.comparing(Person::getAge)
                     .thenComparing(Person::getName));

2. 子列表操作

// 获取子列表视图(与原List共享数据)
List<String> subList = fruits.subList(1, 3);

// 子列表修改会影响原List
subList.set(0, "Peach");

3. 数组转换

// List转数组
String[] array = fruits.toArray(new String[0]);

// 数组转List (Java 9+)
List<String> fromArray = List.of(array);

五、最佳实践

1. 初始化容量

// 如果知道大概元素数量,指定初始容量提高性能
List<String> bigList = new ArrayList<>(1000);

2. 不可变List

// Java 9+ 创建不可变List
List<String> immutable = List.of("A", "B", "C");

// Java 8及以前
List<String> immutable = Collections.unmodifiableList(new ArrayList<>(...));

3. 线程安全处理

// 同步包装
List<String> syncList = Collections.synchronizedList(new ArrayList<>());

// 并发集合 (Java 5+)
List<String> safeList = new CopyOnWriteArrayList<>();

4. 性能考虑

  • ArrayList:随机访问快(O(1)),中间插入/删除慢(O(n))
  • LinkedList:插入/删除快(O(1)),随机访问慢(O(n))

六、Java 8+ 新特性应用

1. removeIf

// 删除所有空元素
list.removeIf(Objects::isNull);

2. replaceAll

// 所有元素转为大写
list.replaceAll(String::toUpperCase);

3. Stream API

// 复杂数据处理
List<String> result = list.stream()
                         .filter(s -> s.length() > 3)
                         .map(String::toLowerCase)
                         .distinct()
                         .collect(Collectors.toList());

List 是 Java 开发中最常用的集合类型,合理使用可以大大提高开发效率。选择适当的实现类(ArrayList/LinkedList)和遵循最佳实践,可以优化程序性能。