java基础-List接口

List接口概述

List是Java集合框架中的一个重要接口,它继承自Collection接口,代表一个有序的、可重复的元素序列。

主要特点

  1. 有序性 - 元素按照插入顺序存储

  2. 可重复 - 允许包含重复元素

  3. 索引访问 - 可以通过索引位置访问元素

  4. 允许null元素 - 可以包含null值

常用实现类

java 复制代码
// ArrayList - 基于动态数组,查询快,增删慢
List<String> arrayList = new ArrayList<>();

// LinkedList - 基于双向链表,增删快,查询慢
List<String> linkedList = new LinkedList<>();

// Vector - 线程安全的动态数组(已过时,不推荐使用)
List<String> vector = new Vector<>();

// Stack - 后进先出的栈结构
List<String> stack = new Stack<>();

核心方法

1. 添加元素

java 复制代码
List<String> list = new ArrayList<>();
list.add("Apple");          // 添加到末尾
list.add(0, "Banana");      // 添加到指定位置
list.addAll(Arrays.asList("Cherry", "Date")); // 添加集合

2. 访问元素

java 复制代码
List<String> list = Arrays.asList("A", "B", "C", "D");
String first = list.get(0);         // 获取第一个元素: "A"
int index = list.indexOf("C");      // 查找元素索引: 2
boolean exists = list.contains("B"); // 检查是否存在: true

3. 修改元素

java 复制代码
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
list.set(1, "X");           // 将索引1的元素改为"X"
// 结果: ["A", "X", "C"]

4. 删除元素

java 复制代码
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
list.remove(1);             // 删除索引1的元素
list.remove("C");           // 删除指定元素
list.clear();               // 清空所有元素

5. 遍历操作

java 复制代码
List<String> list = Arrays.asList("Java", "Python", "C++");

// 1. for循环
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

// 2. 增强for循环
for (String language : list) {
    System.out.println(language);
}

// 3. 迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

// 4. forEach + Lambda (Java 8+)
list.forEach(language -> System.out.println(language));
list.forEach(System.out::println);

6. 其他常用方法

java 复制代码
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));

int size = numbers.size();          // 元素数量: 5
boolean empty = numbers.isEmpty();  // 是否为空: false
Object[] array = numbers.toArray(); // 转换为数组

List<Integer> subList = numbers.subList(1, 4); // 子列表: [2, 3, 4]

选择指南

  • ArrayList: 大多数情况下的首选,查询操作频繁时使用

  • LinkedList: 频繁在列表中间进行插入删除操作时使用

  • Vector : 线程安全需求,但推荐使用Collections.synchronizedList()代替

注意事项

  1. 线程安全: List接口的实现通常不是线程安全的,需要在多线程环境下手动同步

  2. 容量: ArrayList有初始容量和扩容机制,合理设置初始容量可提高性能

  3. 并发修改 : 在使用迭代器时修改列表会抛出ConcurrentModificationException

List接口是Java编程中最基础且重要的数据结构之一,熟练掌握其用法对Java开发至关重要。

相关推荐
2601_968793142 分钟前
Python Requests 轻量自动化:无需浏览器,实现真人级账号浏览模拟
开发语言·python·自动化
eggwyw24 分钟前
关于C++为什么不加入垃圾回收机制解析
开发语言·c++
独泪了无痕9 小时前
探索Pinyin4j-Java中的拼音转换利器
java·后端
道尔柯南10 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
来让爷抱一个11 小时前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
kingx311 小时前
Bugku 3122 谷歌小恐龙题解:纯离线逆向 Vault 的 AES-GCM 加密资源(附 Python 解密器)
java·逆向·ctf·bugku·aes-gcm
DevOpenClub14 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
心祭丫丫14 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
露天赏雪15 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
天天被压力15 小时前
【A股分钟级高频数据完全手册 #06】北交所分钟级数据接口:京市股票Pro版最新分时
java·人工智能·python