概述
- 所有集合类均未提供相应的遍历方法,而是把把遍历交给迭代器完成。迭代器为集 合而生,专门实现集合遍历
- Iterator是迭代器设计模式的具体实现
- Iterator方法
- boolean hasNext(): 判断是否存在另一个可访问的元素
- Object next(): 返回要访问的下一个元素
- void remove(): 删除上次访问返回的对象。
- 遍历的本质
- 实现 Iterable 接口
For-each 循环
优点
- 增强的for循环,遍历array 或 Collection的时候相当简便
- 无需获得集合和数组长度,无需使用索引访问元素,无需循环条件
- 遍历集合时底层调用Iterator完成操作
- 数组:
- 不能方便的访问下标值
- 不要在for-each中尝试对变量赋值,只是一个临时变量
- 集合:
- 与使用Iterator相比,不能方便的删除集合中的内容
缺点
遍历集合用法
遍历 List
1 | List list = new ArrayList<>(); |
遍历 Set
1 | Set list = new HashSet<>(); |
遍历 Map
方法一:使用 entrySet() 方法
1
2
3
4
5
6
7
8
9
10
11Map<Integer,String> map1 = new HashMap<>();
map1.put(100, "aa");
map1.put(200, "bb");
map1.put(300, "cc");
Set<Entry<Integer,String>> s = map1.entrySet();
Iterator<Entry<Integer,String>> iterator = s.iterator();
while(iterator.hasNext()) {
Entry<Integer, String> temp = iterator.next();
System.out.println(temp.getKey()+"------"+temp.getValue());
}方法二:使用 keySet() 方法
1
2
3
4
5
6
7
8
9
10
11Map<Integer,String> map1 = new HashMap<>();
map1.put(100, "aa");
map1.put(200, "bb");
map1.put(300, "cc");
Set<Integer> s = map1.keySet();
Iterator<Integer> iterator = s.iterator();
while(iterator.hasNext()) {
Integer temp = iterator.next();
System.out.println(temp+"----------"+map1.get(temp));
}