Iterator接口:
package lesson2;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
java.util.Iterator接口:迭代器(对集合进行遍历)
有两个常用方法:
boolean hasNext() 如果仍有元素可以迭代,则返回true
判断集合中还有没有下一个元素,有就返回true,没有就返回false
E next() 返回迭代的下一个元素
取出集合的下一个元素
Iterator迭代器是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类方式特殊
Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器的实现类对象
Iterator<E> iterator() 返回在此 collection的元素上进行迭代的迭代器
使用迭代器的步骤:
1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
2.使用Iterator接口中的方法hasNext()判断有没有下一个元素
3.使用Iterator接口中的方法 next 取出集合中的下一个元素
*/
public class Demo01Iterator {
public static void main(String[] args) {
//创建一个集合对象
Collection<String> coll = new ArrayList<>();
//往集合中添加元素
coll.add("张三");
coll.add("李四");
coll.add("王五");
coll.add("马六");
coll.add("宋七");
/*
1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
注意:
Iterator<E>接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型
*/
Iterator<String> it = coll.iterator(); //多态
/*
发现使用迭代器取出集合中元素的代码,是一个重复的过程
使用循环
*/
//while常用
while (it.hasNext()){
String e = it.next();
System.out.println(e);
}
System.out.println("=========");
//for循环实现
for (Iterator<String> it2 = coll.iterator(); it2.hasNext();){
String e = it2.next();
System.out.println(e);
}
/*//2.使用Iterator接口中的方法hasNext()判断有没有下一个元素
boolean b = it.hasNext();
System.out.println(b);//true
//3.使用Iterator接口中的方法 next 取出集合中的下一个元素
String s = it.next();
System.out.println(s);//张三
b = it.hasNext();
System.out.println(b);
s = it.next();
System.out.println(s);
b = it.hasNext();
System.out.println(b);
s = it.next();
System.out.println(s);
b = it.hasNext();
System.out.println(b);
s = it.next();
System.out.println(s);
b = it.hasNext();
System.out.println(b);
s = it.next();
System.out.println(s);
b = it.hasNext();
System.out.println(b);//没有元素,返回false
s = it.next();
System.out.println(s);//没有元素,取出元素会抛出NoSuchElementException没有元素异常*/
}
}
原理:
增强for循环:
package lesson2;
import java.util.ArrayList;
/*
增强for循环:底层也是迭代器,使用for循环格式,简化迭代器书写
JDK1.5之后出现的新特性
Collection<E> extends Iterator<E>:所有的单列集合都可以使用增强for
public interface Iterator<T>实现这个接口允许对象成为"foreach"语句的目标
增强for循环:用来遍历集合和数组
格式:
for(集合/数组的数据类型 变量名: 集合名/数组名){
System.out.println(变量名);
}
*/
public class Demo02Foreach {
public static void main(String[] args) {
//demo01();
demo02();
}
//使用增强for循环遍历集合
private static void demo02() {
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
for(String s:list){
System.out.println(s);
}
}
//使用增强for循环遍历数组
private static void demo01() {
int[] arr = {1,2,3,4,5};
for(int i:arr){
System.out.println(i);
}
}
}