迭代器
1、迭代器概述
迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator
Collection集合获取迭代器的方法
方法名称 | 说明 |
Iterator<E> iterator | 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素 |
Iterator迭代器中的常用方法
方法名称 | 说明 |
boolean hasNext() | 询问当前位置是否有元素存在,存在返回true,不存在返回false |
E next() | 获取当前位置的元素,并同意将迭代器指向下一个元素处 |
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
public class DieDaiQi {
public static void main(String[] args) {
Collection<String>c=new ArrayList<>();
c.add("王一博");
c.add("王艺笛");
c.add("王鹤棣");
c.add("王凯");
System.out.println(c);
//使用迭代器对象遍历集合
//从集合中获取迭代器对象
Iterator<String>iterator=c.iterator();
/*
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
*/
//我们应该使用循环迭代器来遍历集合
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
增强for循环
for(元素的数据类型 变量名:数组或者集合){ } |
增强for循环可以用来遍历集合或者数组
增强for循环遍历集合,本质就是迭代器遍历集合的简化写法
import java.util.ArrayList;
import java.util.Collection;
public class ForLoop {
public static void main(String[] args) {
Collection<String> a=new ArrayList<>();
a.add("王一博");
a.add("王艺笛");
a.add("王鹤棣");
a.add("王凯");
System.out.println(a);
//使用增强for循环遍历集合或数组
for(String ele:a){
System.out.println(ele);
}
String []names={"喵喵","汪汪","旺旺"};
for (String ele1:names){
System.out.println(ele1);
}
}
}
Lambda表达式遍历集合
*得益于JDK8实行的新技术Lambda表达式提供了一种更简单,更直接的方式来遍历集合。
需要使用Clooection 的如下方法来完成
方法名称 | 说明 |
default void forEach(consumer<?super T>action) | 结合lambda遍历集合 |
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
public class Lambda {
public static void main(String[] args) {
Collection<String> a=new ArrayList<>();
a.add("王一博");
a.add("王艺笛");
a.add("王鹤棣");
a.add("王凯");
System.out.println(a);
/*
//default void forEach(consumer<?super T>action) 结合lambda遍历集合
a.forEach(new Consumer<String>() {
@Override
public void accept(String a) {
}
});
*/
/*
a.forEach((String s)->{
System.out.println(s);
});
a.forEach( s-> System.out.println(s));
*/
a.forEach( System.out::println);
}
}
案例:遍历集合中的自定义对象
需求:展示多部电影
分析:①每部电影都是一个对象,多部电影要使用集合装起来。
②遍历集合中的三个电影对象,输出每部电影的详情信息
注意:集合存储对象,并不是存储对象本身,而是存储的是对象的地址,要想存储对象本身,就要重写toString方法
import java.util.ArrayList;
import java.util.Collection;
/**
* 目标:完成电影信息的展示。
* new movie("肖申克的救赎",9.7,“罗宾斯“)
* new movie("霸王别姬",9.6,“张国荣,张丰毅“)
* new movie("阿甘正传",9.5,“汤姆.汉克斯“)
*/
public class Anli {
public static void main(String[] args) {
//创建一个容器,负责存储多部电影对象
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("-----------------------------------");
}
}
}