List
鉴于Java中数组用来存储数据的局限性,我们通常使用java.util.List替代数组。
Java 中的 List 是 Collection 体系下的一个重要分支,特点是:元素有序
List特点
有序:元素按插入顺序排列
可重复:可以存相同元素
支持索引:可以通过下标访问
元素为 Object类型,并且可以为
null
实现类
| 实现类 | 特点 |
|---|---|
ArrayList | 底层数组,查询快,增删慢 |
LinkedList | 双向链表,增删快,查询慢 |
Vector | 线程安全(已不推荐使用) |
ArrayList
ArrayList 是 List 接口的主要实现类。本质上,ArrayList是对象引用的一个”变长”数组
LinkedList
对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高。这是由底层采用链表(双向链表)结构存储数据决定的。
Vector
线程安全(已不推荐使用)
Interface List
List 在 Collection 的基础上,增加了按索引访问、插入、替换、删除等能力。
E get(int index)
根据下标获取指定位置的元素。
java
E get(int index);java
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Go");
String value = list.get(1);
System.out.println(value); // Python下标从 0 开始,如果索引越界,会抛出 IndexOutOfBoundsException。
void add(int index, E element)
在指定位置插入元素,原来位置及后面的元素整体后移。
java
void add(int index, E element);java
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Go");
list.add(1, "Python");
System.out.println(list); // [Java, Python, Go]E set(int index, E element)
替换指定位置元素,并返回被替换的旧元素。
java
E set(int index, E element);java
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
String oldValue = list.set(1, "Golang");
System.out.println(oldValue); // Python
System.out.println(list); // [Java, Golang]boolean addAll(int index, Collection<? extends E> c)
在指定位置插入一个集合中的所有元素。
java
boolean addAll(int index, Collection<? extends E> c);java
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Go");
List<String> other = List.of("Python", "C++");
boolean result = list.addAll(1, other);
System.out.println(result); // true
System.out.println(list); // [Java, Python, C++, Go]返回值:
true:当前集合发生了变化false:当前集合没有变化
E remove(int index)
删除指定下标元素,并返回被删除的元素。
java
E remove(int index);java
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Go");
String removed = list.remove(1);
System.out.println(removed); // Python
System.out.println(list); // [Java, Go]int indexOf(Object o)
返回指定元素第一次出现的下标;如果不存在,返回 -1。
java
int indexOf(Object o);java
List<String> list = List.of("Java", "Python", "Java");
System.out.println(list.indexOf("Java")); // 0
System.out.println(list.indexOf("Spring")); // -1int lastIndexOf(Object o)
返回指定元素最后一次出现的下标;如果不存在,返回 -1。
java
int lastIndexOf(Object o);java
List<String> list = List.of("Java", "Python", "Java");
System.out.println(list.lastIndexOf("Java")); // 2List<E> subList(int fromIndex, int toIndex)
截取子列表,范围是左闭右开,即 [fromIndex, toIndex)。
java
List<E> subList(int fromIndex, int toIndex);java
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Go");
list.add("C++");
List<String> sub = list.subList(1, 3);
System.out.println(sub); // [Python, Go]