Skip to content

List 是 Java 集合框架中的一种集合类型,它表示一个有序、可重复的集合。在 List 中,元素按照插入顺序排列,并且可以包含相同的元素。

Java 提供了java.util.List接口来定义List集合的常用行为和操作方法。List接口继承自Collection接口,因此List也具备了Collection的基本特性和方法。

下面是一些常见的 List 实现类:

  • ArrayList:基于数组实现的动态数组,支持快速随机访问元素。
  • LinkedList:基于链表实现的双向链表,支持高效地插入和删除操作。
  • Vector:与 ArrayList 类似,但是线程安全,适用于多线程环境。
  • Stack:堆栈数据结构的实现,继承自 Vector。

这些List实现类都实现了List接口,并提供了各自的特点和优势,你可以根据具体需求选择合适的实现类。 你可以使用List来存储一组对象,并通过索引访问、添加、删除或修改其中的元素。例如,你可以使用add() 方法将元素添加到列表末尾,使用get()方法获取指定位置的元素,使用remove()方法删除指定位置的元素等。

以下是List接口中常用的一些方法:

  • add(E element):将指定元素添加到列表的末尾。
  • get(int index):返回指定位置处的元素。
  • remove(int index):删除指定位置处的元素,并返回被删除的元素。
  • size():返回列表中的元素个数。
  • isEmpty():判断列表是否为空。
  • contains(Object element):判断列表是否包含指定元素。

这只是List接口提供的一部分方法,还有其他更多方法可以用于操作和管理List集合。

List的特点

List 的特点包括:

  • 有序性:List 中的元素按照插入顺序排列,即元素在列表中的位置是有意义的。你可以根据索引来访问和操作列表中的元素。
  • 可重复性:List 允许存储相同的元素。这意味着你可以向 List 中添加多个相同的元素,并且它们会保留各自的插入顺序。
  • 动态大小:List 的大小是可变的,也就是说,在运行时可以随意添加或删除元素。这使得 List 对于需要频繁增删元素的场景非常适用。
  • 提供索引访问:List 实现了 RandomAccess 接口,因此可以通过索引快速访问列表中的元素。这使得对列表进行遍历、查找和修改等操作更加高效。
  • 支持多种实现类:Java 提供了多种 List 的实现类,如 ArrayList、LinkedList 等,每个实现类都有其特定的优势和适用场景。
  • 继承 Collection 接口:List 接口继承自 Collection 接口,因此具备了 Collection 接口定义的方法和特性,如添加、删除、查询、迭代等。

总之,List 是一种有序、可重复、动态大小的集合类型,提供了方便的索引访问和操作元素的方法。它在许多场景中都是非常常用和实用的集合类型。

List接口的of()方法

List接口的of()方法是Java 9中引入的一个静态工厂方法,它允许我们创建一个不可变的、包含指定元素的列表。这个方法可以用于快速创建一个具有固定元素的List集合。该方法的签名如下:

static <E> List<E> of(E... elements)

使用of()方法时,你可以传入任意数量的参数作为列表的元素,然后该方法会返回一个包含这些元素的不可变列表。例如:

List<String> list = List.of("apple", "banana", "orange");

在上面的例子中,我们创建了一个包含三个字符串元素的列表。注意,由于列表是不可变的,因此不能对其进行添加、删除或修改操作。如果尝试这样做,将会抛出UnsupportedOperationException异常。

of()方法最多只能接受10个参数。如果需要更多的元素,可以考虑使用其他方式来创建列表,比如通过Arrays.asList()方法或者创建一个可变的ArrayList并逐个添加元素。List.of()方法不接受null值,如果传入null,会抛出NullPointerException异常。

Arrays.asList()方法

Arrays.asList()方法是一个用于将数组转换为List集合的便捷方法。它接受一个数组作为参数,并返回一个包含相同元素的固定大小的List。下面是使用Arrays.asList()方法的示例代码:

String[] array = {"apple", "banana", "orange"};
List<String> list = Arrays.asList(array);

System.out.println(list);
输出结果将会是:[apple, banana, orange]。

Arrays.asList()方法返回的是一个固定大小的List,这意味着你不能对其进行添加或删除操作。如果尝试修改该列表的大小,例如调用add()、remove()等方法,将会抛出UnsupportedOperationException异常。

如果你需要一个可变大小的List,可以通过创建一个新的ArrayList来实现:

List<String> mutableList = new ArrayList<>(Arrays.asList(array));
mutableList.add("grape");
mutableList.remove("banana");

System.out.println(mutableList);
输出结果将会是:[apple, orange, grape]。

遍历一个List

遍历一个List有多种方式,下面我将介绍几种常见的方法:

  • 使用for循环:
List<String> list = Arrays.asList("apple", "banana", "orange");

for (int i = 0; i < list.size(); i++) {
    String element = list.get(i);
    System.out.println(element);
}
  • 使用增强型for循环(foreach循环):
List<String> list = Arrays.asList("apple", "banana", "orange");

for (String element : list) {
    System.out.println(element);
}
  • 使用迭代器(Iterator):
List<String> list = Arrays.asList("apple", "banana", "orange");
Iterator<String> iterator = list.iterator();

while (iterator.hasNext()) {
    String element = iterator.next();
    System.out.println(element);
}
  • 使用Java 8的Stream API:
List<String> list = Arrays.asList("apple", "banana", "orange");

list.stream().forEach(System.out::println);

这些方法都可以用来遍历List集合中的元素。你可以根据具体的需求选择适合的遍历方式。

ListArray转换

要将List转换为Array,可以使用toArray()方法。以下是一个示例:

import java.util.ArrayList;
import java.util.List;

public class ListToArrayExample {
    public static void main(String[] args) {
        // 创建一个List
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");

        // 将List转换为Array
        String[] array = list.toArray(new String[0]);

        // 打印Array中的元素
        for (String fruit : array) {
            System.out.println(fruit);
        }
    }
}

要将Array转换为List,可以使用Arrays.asList()方法。以下是一个示例:

import java.util.Arrays;
import java.util.List;

public class ArrayToListExample {
    public static void main(String[] args) {
        // 创建一个Array
        String[] array = {"Apple", "Banana", "Orange"};

        // 将Array转换为List
        List<String> list = Arrays.asList(array);

        // 打印List中的元素
        for (String fruit : list) {
            System.out.println(fruit);
        }
    }
}

在将Array转换为List时,返回的List是一个固定大小的列表,不支持添加或删除元素操作。如果需要对列表进行修改,请创建一个新的ArrayList并传递Array作为参数。