Java Collection集合的遍历方式
1.迭代器
迭代器遍历概述
- 遍历就是一个一个的把容器中的元素访问一遍
- 迭代器在Java中的代表是iterator,迭代器是集合的专用遍历方式
Collection集合获取迭代器
Iterator中常用方法
实例:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* 目标:初步掌握迭代器器的是使用
* */
public class ItratorDemo {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("java");
list.add("python");
list.add("c");
list.add(".net");
//1.获取对应集合的迭代器对象
Iterator<String> it = list.iterator();
//System.out.println(it.next());
//System.out.println(it.next());
//System.out.println(it.next());
//System.out.println(it.next());
while (it.hasNext()){
String str = it.next();
System.out.println(str);
}
}
}
总结
- 迭代器的默认位置在哪里?
- Iterator iterator:得到迭代器对象,默认指向当前集合的索引0
- 迭代器如果取元素越界会出现什么问题。
- 会出现NoSuchElementException异常。
2.foreach/增强for循环
- 增强for循环:既可以遍历集合也可以遍历数组
- 他是JDK5之后出现的,其内部原理是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法。
- 实现Iterator接口的类才可以使用迭代器和增强for,Collection接口实现了Iterator接口
格式:
for (元素数据类型 变量名 : 数组或者Collection集合){
//在此使用变量即可,该变量就是元素
}
实例:
import java.util.ArrayList;
import java.util.Collection;
/**
* 目标:初步学习掌握增强for(foreach)
* */
public class ForEachDedo {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("java");
list.add("python");
list.add("c");
list.add("c++");
list.add("c#");
//利用增强for进行循环遍历
for(String str : list){
System.out.println(str);
}
}
}
总结
- 增强for可以遍历那些容器?
- 既可以遍历集合也可以遍历数组。
- 增强for的关键是记住他的遍历格式
for (元素数据类型 变量名 : 数组或者Collection集合){
//在此使用变量即可,该变量就是元素
}
3.Lambda表达式
Lambda表达式遍历集合
- 得益于JDK8开始的新技术Lambda表达式,提供了一种更简单,更直接的遍历集合的方式
Collection结合Lambda遍历的API
实例:
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
/**
* 目标:初步掌握Lam表达式遍历集合
* */
public class ForEachDemo1 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("java");
list.add("python");
list.add("c");
list.add("c++");
list.add("c#");
//利用Lambda表达式遍历集合
list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
System.out.println("-----------简化代码---------");
list.forEach(s ->System.out.println(s));
}
}
4.综合使用案例
public class Moive {
private String name;
private double score;
private String actor;
public Moive() {
}
public Moive(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;
}
}
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.function.Consumer;
public class TestDemo {
public static void main(String[] args) {
//1.创建Movie对象
Moive m1 = new Moive("《你好,李焕英》", 9.6, "贾玲,沈腾,张小斐");
Moive m2 = new Moive("《唐人街探案》", 8.5, "王宝强,刘昊然,陈赫");
Moive m3 = new Moive("《你好,李焕英》", 8.6, "雷佳音,杨幂");
//2.创建集合对象
Collection<Moive> moives = new ArrayList<>();
//3.将对象添加到集合中
moives.add(m1);
moives.add(m2);
moives.add(m3);
//4.利用foreach遍历集合
System.out.println("=========利用增强for遍历集合======");
for (Moive moive : moives) {
System.out.println(moive.getName());
System.out.println(moive.getScore());
System.out.println(moive.getActor());
System.out.println("=========================");
}
//4.利用迭代器遍历循环
System.out.println("=========利用迭代器遍历循环======");
Iterator<Moive> it = moives.iterator();
while(it.hasNext()){
Moive m = it.next();
System.out.println(m.getName());
System.out.println(m.getScore());
System.out.println(m.getActor());
System.out.println("===========================");
}
//4.利用Lambda表达式遍历循环
System.out.println("=========利用Lambda表达式遍历循环======");
moives.forEach(moive ->{
System.out.println(moive.getName());
System.out.println(moive.getScore());
System.out.println(moive.getActor());
});
}
}