List编程

List 是 Java 集合框架中有序、可重复的接口,继承自  Collection ,常用实现类有  ArrayList (数组实现)、 LinkedList (双向链表实现)、 Vector (线程安全,效率低)。

 

一、核心特点

 

1. 元素有序,按插入顺序存储,支持通过索引访问(索引从 0 开始)。

2. 允许存储重复元素,也可以存储  null ( ArrayList / LinkedList  支持, Vector  同理)。

3. 不同实现类底层结构不同,性能差异较大:

-  ArrayList :查询快、增删慢(尾部增删除外),适合读多写少场景。

-  LinkedList :查询慢、增删快,适合写多读少场景。

 

二、常用创建方式

 

java

// 1. 直接创建空 List

List<String> list1 = new ArrayList<>();

List<Integer> list2 = new LinkedList<>();

 

// 2. 创建时初始化元素(JDK 9+ 支持)

List<String> list3 = List.of("A", "B", "C");

 

// 3. 基于已有集合创建

List<String> list4 = new ArrayList<>(Arrays.asList("X", "Y", "Z"));

 

 

注意: List.of()  创建的是不可变 List,不支持增删操作。

 

三、核心 API 操作

 

1. 增

 

java

List<String> list = new ArrayList<>();

list.add("Java"); // 尾部添加元素

list.add(1, "Python"); // 指定索引插入元素

list.addAll(Arrays.asList("C++", "Go")); // 批量添加集合元素

 

 

2. 删

 

java

list.remove(0); // 根据索引删除,返回被删元素

list.remove("Python"); // 根据元素删除,返回是否删除成功

list.clear(); // 清空所有元素

 

 

3. 改

 

java

list.set(1, "JavaScript"); // 修改指定索引的元素,返回原元素

 

 

4. 查

 

java

String elem = list.get(0); // 获取指定索引元素

int index = list.indexOf("Java"); // 获取元素首次出现的索引,不存在返回 -1

int lastIndex = list.lastIndexOf("Java"); // 获取元素末次出现的索引

boolean contains = list.contains("Go"); // 判断是否包含指定元素

int size = list.size(); // 获取元素个数

boolean isEmpty = list.isEmpty(); // 判断是否为空

 

 

四、遍历方式

 

java

List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));

 

// 1. 普通 for 循环(支持索引操作)

for (int i = 0; i < list.size(); i++) {

    System.out.println(list.get(i));

}

 

// 2. 增强 for 循环(简洁,无索引)

for (String s : list) {

    System.out.println(s);

}

 

// 3. 迭代器(支持遍历中删除元素)

Iterator<String> iterator = list.iterator();

while (iterator.hasNext()) {

    String s = iterator.next();

    if (s.equals("B")) {

        iterator.remove(); // 安全删除,不会触发 ConcurrentModificationException

    }

}

 

// 4. Lambda 表达式(JDK 8+)

list.forEach(s -> System.out.println(s));

 

 

五、常见注意事项

 

1. ArrayList 扩容机制:默认初始容量 10,元素满时自动扩容为原容量的 1.5 倍,频繁扩容会消耗性能,可通过  new ArrayList<>(initialCapacity)  指定初始容量优化。

2. 遍历中删除元素:不能用增强 for 循环直接删除,需用迭代器或 JDK 8+ 的  removeIf()  方法。

3. 线程安全问题: ArrayList  和  LinkedList  是线程不安全的,多线程环境下可使用  Collections.synchronizedList(list)  或  CopyOnWriteArrayList 。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值