Part 2 列表 List
约 964 字大约 3 分钟
Java 列表和数组非常相似,都是按顺序存储同一类型的元素。与数组不同,列表的长度并不固定,极大提高了灵活性。因此列表也可以看作一种动态数组。
列表可以由数组和链表分别实现。在 Java 中,基于数组实现的列表称为 ArrayList,基于链表实现的称为 LinkedList。
1 ArrayList 基本使用
在使用 ArrayList 之前,需要先导入:
import java.util.ArrayList;1.1 创建一个 ArrayList
ArrayList 支持泛型,因此可以在< >中指定 ArrayList 存储的数据类型。
ArrayList<E> list = new ArrayList<E>();
ArrayList<E> list = new ArrayList<>(); // 简化写法其中E表示泛型,只能为引用数据类型。
ArrayList<String> stringList = new ArrayList<>();
ArrayList<int> numberList = new ArrayList<>(); // ERROR: 类型实参不能为基元类型1.2 添加元素
.add()方法接收一个参数时,按顺序向 ArrayList 的末尾添加元素。
ArrayList<String> stringList = new ArrayList<>();
stringList.add("Hello");
stringList.add("World");
// `.toString()`方法可以将 ArrayList 打印为字符串
System.out.println(stringList.toString()); // [Hello, World]此外,.add()方法还可以接收两个参数,将元素插入到指定位置。
ArrayList<String> stringList = new ArrayList<>();
stringList.add("Hello");
stringList.add("World");
// 将 "Java" 字符串添加到第二位(即索引 1)
stringList.add(1, "Java");
System.out.println(stringList.toString()); // [Hello, Java, World]1.3 访问元素
使用.get()方法访问指定位置的元素。
System.out.println(stringList.get(0)); // Hello
System.out.println(stringList.get(1)); // Java
System.out.println(stringList.get(2)); // World如果不知道元素的索引,可以使用.indexOf()方法来查找。
System.out.println(stringList.toString()); // [Hello, Java, Collection]
System.out.println(stringList.indexOf("Java")); // 11.4 修改元素
使用.set()方法修改指定位置的元素,并返回被修改的元素。
System.out.println(stringList.toString()); // [Hello, Java, World]
String setted = stringList.set(2, "Collection");
System.out.println(setted); // World
System.out.println(stringList.toString()); // [Hello, Java, Collection]1.5 删除元素
使用.remove()方法删除指定位置的元素,并返回被删除的元素。
System.out.println(stringList.toString()); // [Hello, Java, Collection]
String removed = stringList.remove(0);
System.out.println(removed); // Hello
System.out.println(stringList.toString()); // [Java, Collection]2 ArrayList 源码解析
待填坑……
3 LinkedList 基本使用
LinkedList 基于链表实现,因此其增删改查和 ArrayList 略有不同。
在使用 LinkedList 之前,需要先导入:
import java.util.LinkedList;3.1 创建一个 LinkedList
LinkedList 的创建与 ArrayList 相同:
LinkedList<E> list = new LinkedList<>();3.2 添加元素
依然可以使用.add()方法向 LinkedList 末尾添加元素。
LinkedList<String> stringList = new LinkedList<>();
stringList.add("Hello");
stringList.add("World");
System.out.println(stringList.toString()); // [Hello, World]也依然可以向.add()方法传入两个参数,在指定位置添加元素。
System.out.println(stringList.toString()); // [Hello, World]
stringList.add(1, "Java");
System.out.println(stringList.toString()); // [Hello, Java, World]但是受益于链表的性质,还可以使用.addFirst()和.addLast()方法向 ArrayList 的头部和尾部添加元素。
LinkedList<String> stringList = new LinkedList<>();
stringList.add("Java");
System.out.println(stringList.toString()); // [Java]
stringList.addFirst("Hello");
stringList.addLast("World");
System.out.println(stringList.toString()); // [Hello, Java, World]3.3 访问元素
和 ArrayList 一样,通过.get()方法访问指定位置的元素,通过.indexOf()方法获取元素索引。
System.out.println(stringList.toString()); // [Hello, Java, World]
System.out.println(stringList.indexOf("Java")); // 1
System.out.println(stringList.get(1)); // Java受益于链表的性质,可以使用.getFirst()和.getLast()方法访问 LinkedList 的头部和尾部元素。
System.out.println(stringList.toString()); // [Hello, Java, World]
System.out.println(stringList.getFirst()); // Hello
System.out.println(stringList.getLast()); // World3.4 修改元素
和 ArrayList 一致,通过.set()方法修改指定位置的元素,并返回被替换的新元素。
System.out.println(stringList.toString()); // [Hello, Java, World]
String setted = stringList.set(2, "Collection");
System.out.println(setted); // World
System.out.println(stringList.toString()); // [Hello, Java, Collection]3.5 删除元素
和 ArrayList 一样,使用.remove()方法删除指定位置的元素,并返回删除的元素。
System.out.println(stringList.toString()); // [Hello, Java, Collection]
String removed = stringList.remove(0);
System.out.println(removed); // Hello
System.out.println(stringList.toString()); // [Java, Collection]受益于链表的性质,可以使用.removeFirst()和.removeLast()删除 LinkedList 的头部和尾部元素,并返回删除的元素。
System.out.println(stringList.toString()); // [Hello, Java, Collection]
String first = stringList.removeFirst();
System.out.println(first); // Hello
String last = stringList.removeLast();
System.out.println(last); // Collection
System.out.println(stringList.toString()); // [Java]4 LinkedList 源码解析
待填坑……