Java中,List是一个非常重要的有序集合接口,位于java.util包中,它继承自Collection接口,Java集合框架核心组成部分;
1. List接口特点
-
有序:元素按照插入顺序存储,可以通过索引(从 0 开始)访问;
-
允许重复元素:同一个对象可以多次添加到 List 中;
-
允许null元素:大多数实现类(如
ArrayList、LinkedList)都支持插入null; -
提供位置访问操作:支持通过索引进行增删改查(如
get(int index)、add(int index, E element))
2. List常用方法
除了Collection接口中的方法,List还多了一些和顺序相关的方法,java.util.List<E> 接口中定义的主要方法(按功能分类)
2.1 添加元素
boolean add(E e) // 尾部添加元素 ,Collection就有的抽象方法
void add(int index, E element) // 在指定位置插入元素,元素后移一位
boolean addAll(Collection<? extends E> c) // 添加整个集合到尾部 ,Collection就有的抽象方法
boolean addAll(int index, Collection<? extends E> c) // 在指定位置插入整个集合
2.2 删除元素
E remove(int index) // 删除指定位置的元素,返回被删元素
boolean remove(Object o) // 删除第一个匹配的元素(值相等)
void clear() // 清空列表
2.3 修改元素
E set(int index, E element) // 替换指定位置的元素,返回旧值
2.4 查询元素
E get(int index) // 获取指定位置的元素
int indexOf(Object o) // 返回首次出现的索引,不存在返回 -1
int lastIndexOf(Object o) // 返回最后一次出现的索引
boolean contains(Object o) // 是否包含某元素
boolean isEmpty() // 是否为空
int size() // 元素个数
2.5 批量操作 批量查询
boolean containsAll(Collection<?> c) // 是否包含集合 c 中所有元素
boolean removeAll(Collection<?> c) // 删除所有与 c 中相同的元素
boolean retainAll(Collection<?> c) // 仅保留 c 中包含的元素(求交集)
2.6 子列表
List<E> subList(int fromIndex, int toIndex)
// 返回 [fromIndex, toIndex) 的子列表(原列表的视图)
2.7 转换为数组
Object[] toArray() // 转为 Object 数组
<T> T[] toArray(T[] a) // 转为指定类型的数组
2.8 迭代器
Iterator<E> iterator() // 返回普通迭代器(继承自 Collection)
ListIterator<E> listIterator() // 返回 List 特有的双向迭代器(可向前/向后遍历、增删改)
ListIterator<E> listIterator(int index) // 从指定位置开始的 ListIterator
2.9 默认方法(JAVA8+)
void replaceAll(UnaryOperator<E> operator) // 对每个元素应用函数进行替换
void sort(Comparator<? super E> c) // 使用比较器排序
2.10 继承自 Collection 的方法
stream(),parallelStream()(Java 8+)spliterator()equals(Object o)→ 按顺序和内容比较hashCode()→ 基于元素计算哈希值
常见实现类
ArrayList:基于动态数组,随机访问快,增删慢。LinkedList:基于双向链表,增删快,随机访问慢。Vector:线程安全的 ArrayList(已过时,推荐用Collections.synchronizedList)。Stack:继承自 Vector,LIFO 栈(不推荐使用,建议用Deque)。