目录
Collection的遍历方式
迭代器
增强for循环(foreach)
Lambda表达式遍历集合
案例
需求与分析
代码部分
运行结果
Collection的遍历方式
迭代器
- 选代器是用来遍历集合的专用方式(数组没有选代器),在Java中选代器的代表是lterator。
Collection集合获取选代器的方法
方法名称 | 说明 |
---|---|
Iterator<E> iterator() | 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素 |
Iterator选代器中的常用方法
方法名称 | 说明 |
---|---|
boolean hasNext() | 询问当前位置是否有元素存在,存在返回true,不存在返回false |
E next() | 获取当前位置的元素,并同时将选代器对象指向下一个元素处。 |
具体实现
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class IteratorDemo {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("凌翔茜");c.add("蒋川");c.add("余周周");c.add("林杨");System.out.println(c);//c = [凌翔茜, 蒋川, 余周周, 林杨]//使用迭代器遍历集合//1.从集合对象中获取迭代器对象Iterator<String> it = c.iterator();//2.结合循环进行遍历while(it.hasNext()){String ele = it.next();System.out.println(ele);}}
}
运行结果:
它的执行流程是:
首先迭代器对象指向的是集合中的第一个元素,来到第一行代码,hasNext方法先查看当前位置是否有元素,只要有元素就执行while循环;然后next方法获取到当前位置的元素,同时将迭代器指向下一个元素的位置,一次循环结束则输出一个元素,直到hasNext查看到当前位置已无元素,则循环结束,集合遍历完成。
注意:不能一次性输出集合内的2个或2个以上的元素值,这样有极大的可能会造成异常。
(例如最后一个元素时,next方法再指向下一个元素值,已经是为null值了,不允许再继续访问了)
例如:
增强for循环(foreach)
- 增强for可以用来遍历集合或者数组。
- 增强for遍历集合,本质就是迭代器遍历集合的简化写法。
格式
for(元素的数据类型 变量名:数组或者集合){
}
Collection<String> c = new ArrayList<>();
...
for(String s:c){System.out.println(s);
}
具体实现
package user.Collection;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class IteratorDemo {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("凌翔茜");c.add("蒋川");c.add("余周周");c.add("林杨");//使用增强for遍历集合或者数组for (String ele:c) {System.out.println(ele);}System.out.println();String[] names = {"赵敏","小昭","素素","灭绝"};for (String name:names){System.out.println(name);}}
}
运行结果:
Lambda表达式遍历集合
- 得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的方式来遍历集合。
需要使用Collection的如下方法来完成
方法名称 | 说明 |
---|---|
default void forEach(Consumer<? super T> action) | 结合Lambda遍历集合 |
具体实现
package user.Collection;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.function.Consumer;public class IteratorDemo {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("凌翔茜");c.add("蒋川");c.add("余周周");c.add("林杨");//default void forEach(Consumer<? super T> action):结合Lambda表达式遍历集合c.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});c.forEach( s -> System.out.println(s) );c.forEach( System.out::println);}
}
运行结果应该是循环遍历了三次集合的:
案例
需求与分析
需求:展示多部电影信息。(电影展示信息不限)
完成这个案例的目的:
- 加深对集合遍历的掌握
- 回顾一下集合存储对象的特点
分析
- 每部电影都是一个对象,多部电影要使用集合装起来。
- 遍历集合中的3个电影对象,输出每部电影的详情信息。
代码部分
定义电影类
public class Movie {private String name;private double score;private String actor;public Movie() {}public Movie(String name, double score, String actor) {this.name = name;this.score = score;this.actor = actor;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}public String getActor() {return actor;}public void setActor(String actor) {this.actor = actor;}@Overridepublic String toString() {return "Movie{" +"name='" + name + '\'' +", score=" + score +", actor='" + actor + '\'' +'}';}
}
主程序
import java.util.ArrayList;
import java.util.Collection;public class MovieTest {public static void main(String[] args) {//1.创建一个集合容器负责存储多部电影信息Collection<Movie> movies = new ArrayList<>();movies.add(new Movie("肖申克的救赎",9.7,"罗宾斯"));movies.add(new Movie("霸王别姬",9.6,"张国荣、张丰毅"));movies.add(new Movie("阿甘正传",9.5,"汤姆.汉克斯"));System.out.println(movies);for(Movie movie:movies){System.out.println("电影名: " + movie.getName());System.out.println("评分: " + movie.getScore());System.out.println("主演: " + movie.getActor());System.out.println("-----------------------------------------------------");}}
}
运行结果
END
学习自:黑马程序员——JavaSE课程