Java List 接口

List 又称列表,是一个有序集合。在本教程中,我们将了解 Java 中的 List 接口及其方法。

List 又称列表,是一个有序集合。在本教程中,我们将了解 Java 中的 List 接口及其方法。

在 Java 中, List 接口是一个有序集合,它允许我们按顺序存储和访问元素。它扩展了 Collection 接口。

List 接口的实现类

由于 List 是一个接口,我们不能从它创建对象。

下面的这些类都实现了 List 接口,我们可以直接使用这些类:

在 Java 中实现 List 接口的类
Java列表接口

这些类都定义在集合框架中并实现了 List 接口。

如何创建列表?

在 Java 中,我们必须导入 java.util.List 包才能使用 List。由于 List 是接口,我们无法直接实例化 List 对象,我们需要用到 List 接口的实现类。

以下是创建 List 对象的几种方法:

  1. 直接使用 List 接口的实现类

    ArrayListLinkedList 是 2 个最常用的 List 接口的实现类。请看以下示例:

    List<String> list1 = new ArrayList<>();
    List<String> list2 = new LinkedList<>();
    
  2. 使用 Arrays.asList() 方法

    Arrays.asList() 返回一个固定大小的列表。如下:

    List<Integer> numbers = Arrays.asList(1, 2, 3);
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
    

    注意:Arrays.asList() 返回一个固定大小的列表,能修改列表中的值,不能增加和删除元素,否则会报错。

  3. 使用 List.of() 方法

    List.of() 返回一个不可修改的列表。如下:

    List<Integer> numbers = List.of(1, 2, 3);
    List<Integer> numbers = List.of(1, 2, 3, 4);
    

    注意:``List.of()` 返回一个不可修改的列表,不能修改列表中的值,也不能增加和删除元素,否则会报错。

  4. Collections 工具类中提供的了几种方法创建特殊的列表

    • Collections.emptyList(): 创建一个不可修改的空列表
    • Collections.singletonList(o): 创建一个只包含一个对象的不可修改的列表
    • Collections.unmodifiableList(list): 将一个列表转变为不可修改的列表

在这里,我们已经创建了 ArrayList 类型的对象 list1LinkedList 类型的对象 list2

列表方法

List 接口继承 Collection 接口的所有方法,又扩展了一些其他的方法。

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

  • add() - 向列表中添加一个元素
  • addAll() - 将一个列表的所有元素添加到另一个列表
  • get() - 有助于从列表中随机访问元素
  • iterator() - 返回可用于顺序访问列表元素的迭代器对象
  • set() - 更改列表元素
  • remove() - 从列表中删除一个元素
  • removeAll() - 从列表中删除所有元素
  • clear() - 从列表中删除所有元素(比 更有效 removeAll()
  • size() - 返回列表的长度
  • toArray() - 将列表转换为数组
  • contains() - 如果列表包含指定元素,则返回 true ,否则返回 false

List 接口的实现类

  1. ArrayList

    import java.util.List;
    import java.util.ArrayList;
    
    public class Main {
      public static void main(String[] args) {
        // 创建 ArrayList 对象
        List<Integer> numbers = new ArrayList<>();
    
        // 添加元素
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("List: " + numbers);
    
        // 访问列表中的元素
        int number = numbers.get(2);
        System.out.println("Accessed Element: " + number);
    
        // 从列表中删除一个元素
        int removedNumber = numbers.remove(1);
        System.out.println("Removed Element: " + removedNumber);
      }
    }
    

    输出

    List: [1, 2, 3]
    Accessed Element: 3
    Removed Element: 2

    要了解关于 ArrayList 的更多信息,请访问 Java ArrayList 章节。

  2. LinkedList

    import java.util.List;
    import java.util.LinkedList;
    
    public class Main {
      public static void main(String[] args) {
        // 创建 LinkedList 对象
        List<Integer> numbers = new LinkedList<>();
    
        // 添加元素
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("List: " + numbers);
    
        // 访问列表中的元素
        int number = numbers.get(2);
        System.out.println("Accessed Element: " + number);
    
        // 使用 indexOf() 返回一个元素的索引
        int index = numbers.indexOf(2);
        System.out.println("Position of 3 is " + index);
    
        // 从列表中删除一个元素
        int removedNumber = numbers.remove(1);
        System.out.println("Removed Element: " + removedNumber);
      }
    }
    

    输出

    List: [1, 2, 3]
    Accessed Element: 3
    Position of 3 is 1
    Removed Element: 2

    要了解关于 LinkedList 的更多信息,请访问 Java LinkedList

  3. Vector

    VectorArrayList 类似,也实现了一个自增长的数组。与 ArrayList 不同的是, Vecotor 的所有方法都是同步方法。下面是一个简单的 Vector 示例:

    import java.util.Vector;
    
    public class Main {
      public static void main(String[] args) {
        // 创建 Vector 对象
        Vector<Integer> numbers = new Vector<>();
    
        // 添加元素
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("Vector: " + numbers);
    
        System.out.println("First Element: " + numbers.firstElement());
        System.out.println("Last Element: " + numbers.lastElement());
      }
    }
    

    输出

    Vector: [1, 2, 3]
    First Element: 1
    Last Element: 3

Java List 与 Set

List 接口和 Set 接口都继承自 Collection 接口。但是,它们之间存在一些差异。

  • List 可以包含重复的元素。但是, Set 不能有重复的元素。
  • List 的元素以某种顺序存储。但是,Set 是不保证顺序的。

现在我们知道是什么了 List ,我们将在接下来的教程中详细了解 ArrayListLinkedList 类。