深入解析OnJava8-Examples中的List集合操作

深入解析OnJava8-Examples中的List集合操作

OnJava8-Examples Code Examples for the book "On Java 8" OnJava8-Examples 项目地址: https://gitcode.com/gh_mirrors/on/OnJava8-Examples

前言

List是Java集合框架中最常用的数据结构之一,它提供了有序且可重复的元素存储能力。在Bruce Eckel的OnJava8-Examples项目中,ListFeatures.java文件展示了Java中List接口的各种实用操作。本文将深入解析这些操作,帮助读者全面掌握List的使用技巧。

List基础操作

创建与初始化

示例中首先创建了一个包含7个Pet对象的List:

List<Pet> pets = new PetCreator().list(7);
System.out.println("1: " + pets);

这里使用了PetCreator工厂类来生成Pet对象列表。输出显示列表初始包含各种宠物类型,如Rat、Manx、Cymric等。

添加元素

List会自动调整大小以适应新元素:

Hamster h = new Hamster();
pets.add(h); // 自动调整大小
System.out.println("2: " + pets);

add()方法将元素追加到列表末尾,列表大小会自动增加。

元素检查与移除

System.out.println("3: " + pets.contains(h)); // 检查元素是否存在
pets.remove(h); // 通过对象引用移除

contains()方法检查元素是否存在,remove()方法通过对象引用移除元素。注意,移除操作需要精确的对象匹配。

进阶操作

索引相关操作

Pet p = pets.get(2); // 获取索引为2的元素
System.out.println("4: " + p + " " + pets.indexOf(p)); // 获取元素索引

Pet cymric = new Cymric();
System.out.println("5: " + pets.indexOf(cymric)); // 新对象不在列表中,返回-1

get()通过索引获取元素,indexOf()查找元素首次出现的索引。注意,对于新创建的对象,即使类型相同也不被视为列表中的元素。

指定位置插入

pets.add(3, new Mouse()); // 在索引3处插入新元素

add(index, element)方法可以在指定位置插入元素,后续元素会自动后移。

子列表操作

创建子列表

List<Pet> sub = pets.subList(1, 4); // 获取子列表(包含1,不包含4)

subList()方法创建原始列表的视图,对子列表的修改会影响原始列表。

排序与洗牌

Collections.sort(sub); // 原地排序
Collections.shuffle(sub, rand); // 随机打乱顺序

Collections工具类提供了对列表的排序和随机重排功能。

批量操作

包含性检查

System.out.println("10: " + pets.containsAll(sub)); // 检查是否包含所有子列表元素

containsAll()检查列表是否包含指定集合中的所有元素,不考虑顺序。

保留与移除

copy.retainAll(sub); // 只保留与sub相同的元素
copy.removeAll(sub); // 移除所有与sub相同的元素

retainAll()removeAll()提供了批量操作元素的能力。

其他实用操作

列表转换

Object[] o = pets.toArray(); // 转换为Object数组
Pet[] pa = pets.toArray(new Pet[0]); // 转换为指定类型的数组

toArray()方法提供了列表到数组的转换能力,第二种形式可以指定数组类型。

清空与判空

pets.clear(); // 清空列表
System.out.println("20: " + pets.isEmpty()); // 检查是否为空

clear()移除所有元素,isEmpty()检查列表是否为空。

总结

通过OnJava8-Examples中的ListFeatures示例,我们全面了解了Java List接口的各种操作:

  1. 基本操作:添加、移除、检查元素
  2. 索引操作:获取、查找、插入
  3. 子列表操作:创建视图、排序、洗牌
  4. 批量操作:包含检查、保留、移除
  5. 转换操作:列表与数组互转
  6. 状态操作:清空、判空

掌握这些操作能够帮助开发者更高效地处理有序数据集合。List作为Java集合框架的核心接口,其灵活性和功能性在实际开发中有着广泛的应用。

OnJava8-Examples Code Examples for the book "On Java 8" OnJava8-Examples 项目地址: https://gitcode.com/gh_mirrors/on/OnJava8-Examples

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱溪双Bridget

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值