第一部分:Java集合框架概述
Java集合框架提供了一套接口和类,用于存储和处理数据集合
学习目标
理解Java集合框架的层次结构,掌握主要集合类型及其特点
集合框架层次结构
- Collection接口:所有集合类的根接口
- List接口:有序集合,允许重复元素(ArrayList, LinkedList)
- Set接口:无序集合,不允许重复元素(HashSet, TreeSet)
- Queue接口:队列实现(LinkedList, PriorityQueue)
- Map接口:键值对集合(HashMap, TreeMap)
为什么需要遍历集合
- 访问集合中的每个元素
- 对元素进行处理或转换
- 过滤符合条件的元素
- 聚合计算(求和、平均值等)
- 查找特定元素
List 集合
- ArrayList
- LinkedList
- Vector
- Stack
Set 集合
- HashSet
- LinkedHashSet
- TreeSet
Map 集合
- HashMap
- LinkedHashMap
- TreeMap
- Hashtable
Queue 集合
- LinkedList
- PriorityQueue
- ArrayDeque
第二部分:集合遍历方法
Java提供了多种集合遍历方式,各有适用场景
学习目标
掌握各种集合遍历方法,理解其优缺点及适用场景
for循环遍历(List)
适用于List等有索引的集合
注意:此方法不适用于Set等无索引的集合
增强for循环
适用于所有实现Iterable接口的集合
注意:遍历过程中不能修改集合结构
迭代器遍历
最通用的集合遍历方式
使用迭代器可以在遍历过程中安全地删除元素
forEach方法(Java 8+)
使用Lambda表达式简化遍历
使用::方法引用更简洁:names.forEach(System.out::println)
第三部分:迭代器详解
深入理解迭代器的工作原理和使用方法
学习目标
掌握Iterator接口的核心方法,理解迭代器的工作机制
hasNext()
检查集合中是否还有更多元素
next()
返回下一个元素并移动迭代器位置
remove()
删除上次调用next()返回的元素
forEachRemaining() (Java 8+)
对剩余元素执行操作
1. 创建迭代器
通过集合的iterator()方法获取
2. 检查元素
使用hasNext()检查是否还有元素
3. 获取元素
使用next()获取当前元素并前进
4. 可选操作
对元素进行操作,或使用remove()删除
5. 重复步骤2-4
直到hasNext()返回false
第四部分:Map集合遍历
Map集合的多种遍历方式及其适用场景
学习目标
掌握Map集合的键、值、键值对的遍历方法
遍历键集合(KeySet)
只获取键,不直接获取值
遍历值集合(Values)
只获取值,不获取对应的键
遍历键值对(EntrySet)
推荐方式:同时获取键和值,效率较高
Java 8+的forEach方法
最简洁的方式,适合现代Java开发
第五部分:常见错误与最佳实践
避免常见陷阱,掌握集合遍历的最佳实践
学习目标
识别并解决集合遍历中的常见问题,掌握高效安全的使用方法
常见错误1:并发修改异常
ConcurrentModificationException
在使用增强for循环时修改集合结构
解决方案:使用迭代器的remove()方法
常见错误2:迭代器使用不当
NoSuchElementException
在调用next()前未检查hasNext()
解决方案:始终在调用next()前检查hasNext()
遍历方式选择
- 需要索引时:使用for循环(仅List)
- 需要删除元素:使用迭代器
- 简单遍历:增强for循环
- Java 8+:优先使用forEach
性能优化
- ArrayList:for循环最快
- LinkedList:使用迭代器或增强for循环
- HashMap:优先使用entrySet
- 大集合:避免多次调用size()
线程安全
- 多线程环境使用同步集合
- 或使用Collections.synchronizedXXX
- 或使用ConcurrentHashMap等并发集合
- 使用迭代器时需要外部同步
遍历方式 | 适用集合 | 可删除元素 | 性能 | 线程安全要求 |
---|---|---|---|---|
for循环 | List及其子类 | 是(使用索引删除) | 高(ArrayList) 低(LinkedList) |
需要外部同步 |
增强for循环 | 所有Iterable | 否 | 中 | 需要外部同步 |
迭代器 | 所有Collection | 是(使用remove()) | 中 | 需要外部同步 |
forEach (Java 8+) | 所有Iterable | 否 | 中高 | 需要外部同步 |
第六部分:总结与练习
巩固学习成果,通过练习掌握集合遍历技巧
学习目标
总结集合遍历要点,通过实践加深理解
关键知识点总结
- 集合遍历是访问集合元素的基本操作
- Java提供了多种遍历方式:for循环、增强for、迭代器、forEach
- 迭代器是唯一允许在遍历中安全删除元素的方式
- Map集合最有效的遍历方式是通过entrySet
- 避免在遍历过程中修改集合结构(除迭代器remove外)
- Java 8的forEach方法结合Lambda让代码更简洁
动手练习
- 创建一个String类型的ArrayList,使用四种不同方式遍历并打印元素
- 创建一个HashMap,存储商品名称和价格,遍历并打印所有超过100元的商品
- 创建一个Integer类型的HashSet,使用迭代器删除所有偶数
- 比较ArrayList和LinkedList在不同遍历方式下的性能差异
- 编写一个方法,接收任意Collection,返回元素数量统计
理解检查
在遍历ArrayList时,哪种方式性能最好?