List 接口及其常用方法
阅读原文时间:2023年08月17日阅读:4

List 接口基本介绍

List接口是Collection接口的子接口,其主要特点如下:

  1. List中元素有序,是按照元素的插入顺序进行排序的。每个元素都有一个与之关联的整数型索引(索引从 0 开始),可以根据索引来访问和操作元素,可以使用普通 for 循环遍历。

  2. List中可以包含重复的元素。

    public class ListTest() {
    public static void main(String[] args) {
    // List 中元素有序、且可重复
    List list = new ArrayList();
    list.add("Jack");
    list.add("Rose");
    list.add("May");
    list.add("Luck");
    list.add("Jack");
    System.out.println("list = " + list); // list = [Jack, Rose, May, Luck, Jack]

    // List 支持索引
    System.out.println(list.get(2)); // May

    }
    }

List 接口常用方法

下面的代码以其实现类ArrayList演示List接口的常用方法。

public class ListMethod() {
  public static void main(String[] args) {
    List list = new ArrayList();
    // 添加指定元素到列表末尾
    list.add("任盈盈");
    list.add("赵敏");
    System.out.println("list = " + list); // list = [任盈盈, 赵敏]

    // void add(int index, E element)
    // 在此列表的指定位置插入指定的元素。
    // 将当前位于该位置的元素(如果有)以及后续的元素向右移动(索引加一)。
    list.add(1, "周芷若");
    System.out.println("list = " + list); // list = [任盈盈, 周芷若, 赵敏]

    // boolean addAll(int index, Collection<? extends E> c)
    // 将指定集合中的所有元素按指定位置插入到此列表中。
    // 将当前位于该位置的元素(如果有)以及后续的元素向右移动(索引增加)。
    // 新元素将按照指定集合迭代器返回它们的顺序出现在此列表中。
    List list1 = new ArrayList();
    list1.add("风清扬");
    list1.add("任我行");
    list.addAll(2, list1);
    System.out.println("list = " + list); // list = [任盈盈, 周芷若, 风清扬, 任我行, 赵敏]

    // E get(int index):返回此列表中指定位置的元素。
    System.out.println(list.get(1)); // 周芷若

    list.add("风清扬");
    System.out.println("list = " + list); // list = [任盈盈, 周芷若, 风清扬, 任我行, 赵敏, 风清扬]

    // int indexOf(Object o)
    // 返回此列表中指定元素第一次出现的索引,如果列表不包含该元素,则返回 -1。
    System.out.println(list.indexOf("风清扬")); // 2
    // int lastIndexOf(Object o)
    // 返回此列表中指定元素最后一次出现的索引,如果列表不包含该元素,则返回 -1。
    System.out.println(list.lastIndexOf("风清扬"));// 5

    // E remove(int index):移除此列表中指定位置的元素。
    // 将任何后续的元素向左移动(其索引减一)。返回从列表中移除的元素。
    list.remove(0);
    System.out.println("list = " + list); // list = [周芷若, 风清扬, 任我行, 赵敏, 风清扬]

    // boolean remove(Object o):从列表中移除指定元素的第一个匹配项(如果存在)。
    // 如果列表不包含该元素,则列表保持不变。如果列表发生更改,则返回 true。
    list.remove("风清扬");
    System.out.println("list = " + list); // list = [周芷若, 任我行, 赵敏, 风清扬]

    //E set(int index, E element):用指定元素替换列表中指定位置的元素。
    list.set(1, "张无忌");
    System.out.println("list = " + list); // list = [周芷若, 张无忌, 赵敏, 风清扬]

    // List<E> subList(int fromIndex, int toIndex)
    // 返回此列表中从 fromIndex(包括)到 toIndex(不包括)的子集合。
    // 如果 fromIndex 和 toIndex 相等,则返回的列表为空。
    List list2 = list.subList(1, 3);
    System.out.println("list2 = " + list2); // list2 = [张无忌, 赵敏]
    // 该方法消除了显式的范围操作的需求(这种操作通常用于数组)。
    // 需要对列表的一部分进行的操作都可以通过传递子列表视图而不是把整个列表作为范围,
    // 类似的习惯用法也可以用于 indexOf 和 lastIndexOf 方法。
    // 例如,以下习惯用法从列表中移除了一系列元素:
    System.out.println("list = " + list); // 输出:list = [周芷若, 张无忌, 赵敏, 风清扬]
    list.subList(1, 3).clear();
    System.out.println("list = " + list);// 输出:list = [周芷若, 风清扬]
  }
}

List 接口遍历元素方式

List接口可以使用 Iterator(迭代器)、增强 for 循环和普通 for 循环三种方式来遍历元素,下面的代码以其实现类Vector演示List接口遍历元素的方式。

public class ThroughElements() {
  public static void main(String[] args) {
    List list = new Vector();

    list.add("蛋挞");
    list.add("芝士蛋糕");
    list.add("提拉米苏");

    System.out.println("---使用 Iterator---");
    Iterator iterator = list.iterator();
    while (iterator.hasNext()) {
      Object o = iterator.next();
      System.out.println(o);
    }

    System.out.println("---使用增强 for 循环---");
    for (Object o : list) {
      System.out.println(o);
    }

    System.out.println("---使用普通 for 循环---");
    for (int i = 0; i < list.size(); i++) {
      System.out.println(list.get(i));
    }
  }
}