java数据结构--List的介绍
一、什么是List
在 Java 中,List
是java.util
包下的一个接口,继承自Collection
接口,是 Java 集合框架的重要组成部分。它用于存储有序的、可重复的元素集合,允许通过索引(位置)访问元素。
List 的核心特性:
- 有序性:元素的插入顺序与存储顺序一致
- 可重复性:允许包含相同的元素(通过
equals()
方法判断) - 索引访问:可以通过整数索引(从 0 开始)精确访问、修改元素
- 动态容量:大多数实现类(如
ArrayList
)会自动扩容,无需手动指定大小
常见的 List 实现类:
ArrayList
:基于动态数组实现,查询效率高,增删效率低(尤其中间位置)LinkedList
:基于双向链表实现,增删效率高,查询效率低Vector
:线程安全的动态数组(已基本被ArrayList
替代)Stack
:继承自Vector
,实现栈结构(推荐使用Deque
替代)
二、List 接口的常见方法
List 接口继承了Collection
的所有方法,并增加了针对索引操作的特有方法,主要包括:
2.1.添加元素
boolean add(E e)
:在列表末尾添加元素void add(int index, E element)
:在指定索引处插入元素boolean addAll(Collection<? extends E> c)
:添加集合中所有元素到末尾boolean addAll(int index, Collection<? extends E> c)
:从指定索引开始添加集合元素
2.2.删除元素
E remove(int index)
:删除并返回指定索引处的元素boolean remove(Object o)
:删除第一个与指定对象相等的元素boolean removeAll(Collection<?> c)
:删除所有包含在指定集合中的元素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)
:判断列表是否包含指定元素int size()
:返回列表元素个数boolean isEmpty()
:判断列表是否为空
2.5.其他操作
List<E> subList(int fromIndex, int toIndex)
:返回从fromIndex
(包含)到toIndex
(不包含)的子列表Object[] toArray()
:将列表转换为数组Iterator<E> iterator()
:返回迭代器,用于遍历元素
三、List的使用
下面以最常用的ArrayList
为例,演示 List 的基本使用:
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;public class ListExample {public static void main(String[] args) {// 1. 创建List对象(多态写法,推荐使用接口引用)List<String> fruits = new ArrayList<>();// 2. 添加元素fruits.add("Apple");fruits.add("Banana");fruits.add("Cherry");fruits.add(1, "Blueberry"); // 在索引1处插入元素System.out.println("列表元素: " + fruits); // 输出: [Apple, Blueberry, Banana, Cherry]// 3. 访问元素String firstFruit = fruits.get(0);System.out.println("第一个元素: " + firstFruit); // 输出: Apple// 4. 修改元素String oldFruit = fruits.set(2, "Grape");System.out.println("被替换的元素: " + oldFruit); // 输出: BananaSystem.out.println("修改后列表: " + fruits); // 输出: [Apple, Blueberry, Grape, Cherry]// 5. 删除元素String removedFruit = fruits.remove(3);System.out.println("删除的元素: " + removedFruit); // 输出: Cherry// 6. 遍历元素(三种方式)System.out.println("\n遍历方式1: for循环");for (int i = 0; i < fruits.size(); i++) {System.out.println(fruits.get(i));}System.out.println("\n遍历方式2: 增强for循环");for (String fruit : fruits) {System.out.println(fruit);}System.out.println("\n遍历方式3: 迭代器");Iterator<String> iterator = fruits.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}// 7. 其他常用操作System.out.println("\n是否包含Apple: " + fruits.contains("Apple")); // trueSystem.out.println("元素个数: " + fruits.size()); // 3System.out.println("是否为空: " + fruits.isEmpty()); // false// 8. 清空列表fruits.clear();System.out.println("清空后是否为空: " + fruits.isEmpty()); // true}
}
使用场景选择:
- 频繁查询、较少增删时,优先使用
ArrayList
- 频繁在中间位置增删、较少查询时,优先使用
LinkedList
- 需要线程安全时,可使用
Collections.synchronizedList(List)
包装普通 List
List 是 Java 中最常用的集合类型之一,熟练掌握其用法对于处理有序数据集合至关重要。