Collection集合的遍历方式
- 方式一:迭代器
- (1)迭代器遍历概述
- (2)Collection集合获取迭代器
- (3)Iterator中的常用方法
- (4)总结
- 方式二:foreach/ 增强for循环
- (1)增强for循环
- (2)格式
- (3)总结
- 方式三:lambda表达式
- (1)Lambda表达式遍历集合
- (2)Collection结合Lambda遍历的API
方式一:迭代器
(1)迭代器遍历概述
●遍历就是一个一个的把容器中的元素访问一遍。
●迭代器在Java中的代表是Iterator, 迭代器是集合的专用遍历方式。
(2)Collection集合获取迭代器
方法名称 | 说明 |
Iterator iterator( ) | 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引 |
(3)Iterator中的常用方法
方法名称 | 说明 |
boolean hasNext() | 询问当前位置是否有元素存在,存在返回true,不存在返回false |
E next() | 获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界 |
Collection<String> lists = new ArrayList<>();
lists.add("one");
lists.add("two");
lists.add("three");
lists.add("four");
System.out.println(lists);
//[one, two, three, four]
//1.得到当前集合的迭代器对象
Iterator<String> it = lists.iterator();
String s = it.next();
System.out.println(s);//one
System.out.println(it.next());//two
System.out.println(it.next());//three
System.out.println(it.next());//four
//System.out.println(it.next());//NoSuchElementException 出现无此元素异常的错误
Collection<String> lists = new ArrayList<>();
lists.add("one");
lists.add("two");
lists.add("three");
lists.add("four");
System.out.println(lists);
//[one, two, three, four]
//1.得到当前集合的迭代器对象
Iterator<String> it = lists.iterator();
// String s = it.next();
// System.out.println(s);//one
// System.out.println(it.next());//two
// System.out.println(it.next());//three
// System.out.println(it.next());//four
// //System.out.println(it.next());//NoSuchElementException 出现无此元素异常的错误
//2.定义while循环
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
(4)总结
1、迭代器的默认位置在哪里。
●Iterator iterator():得到迭代器对象,默认指向当前集合的索引0
2、迭代器如果取元素越界会出现什么问题。
●会出现NoSuchElementException异常。
方式二:foreach/ 增强for循环
(1)增强for循环
●增强for循环:既可以遍历集合也可以遍历数组。
●它是JDK5之后出现的,其内部原理是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法。
●实现Iterable接 口的类才可以使用迭代器和增强for, Collection接口已经实现了Iterable接口。
(2)格式
Collection<String> lists = new ArrayList<>();
lists.add("one");
lists.add("two");
lists.add("three");
lists.add("four");
System.out.println(lists);
//[one, two, three, four]
//遍历集合
for (String s : lists) {
System.out.println(s);
}
System.out.println("-----------------------");
//遍历数组
double[] scores = {59.5,60,99,88};
for (double score : scores) {
System.out.println(score);
}
注意:修改变量的值时,数组的内容不会改变
//遍历数组
double[] scores = {59.5,60,99,88};
System.out.println(Arrays.toString(scores));
for (double score : scores) {
System.out.println(score);
if (score == 60){
score = 66;//修改无意义,不会影响数组的元素值
}
}
System.out.println(Arrays.toString(scores));
(3)总结
1、 增强for可以遍历哪些容器?
●既可以遍历集合也可以遍历数组。
2、增强for的关键是记住它的遍历格式
方式三:lambda表达式
(1)Lambda表达式遍历集合
●得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
(2)Collection结合Lambda遍历的API
方法名称 | 说明 |
default void forEach(Consumer<? super T> action): | 结合lambda遍历集合 |
Collection<String> lists = new ArrayList<>();
lists.add("one");
lists.add("two");
lists.add("three");
lists.add("four");
System.out.println(lists);
//[one, two, three, four]
// lists.forEach(new Consumer<String>() {
// @Override
// public void accept(String s) {
// System.out.println(s);
// }
//化简
// lists.forEach(s -> {
// System.out.println(s);
// });
//再化简
// lists.forEach(s -> System.out.println(s));
//继续化简
lists.forEach(System.out::println);