![7756df043aa7ee14ccc494d91b536a01.png](https://i-blog.csdnimg.cn/blog_migrate/bcfc5bdbef7a6359d8b61c9c6adee482.jpeg)
一、增强for循环(JDK1.5以后)
1、介绍
JDK 1.5 新特性,增强for循环
JDK1.5版本后,出现新的接口java.lang.Iterable
Collection(根类)开始继承Iterable
Iterable作用,只为实现增强for循环
2、格式
for(数据类型 变量名 : 数组或者集合){
sop(变量);
3、代码
int [] arr={1,2,3,4,5};
for(int i :arr){
System.out.println();
}
补充:
int [] arr={1,2,3,4,5};
for(int i :arr){
System.out.println(i+1); //此时输出的元素都+1
}
for(int j = 0 ;j<arr.length;++){
System.out.println(i); //输出的原来元素,
}
之所以会这样,是因为集合中的元素,依次赋值给i(是没有索引的),并没有改变原来数组的值,所以才会输出原数组。
4、优缺点
优点: 代码少,方便对容器遍历
缺点: 没有索引,不能对容器里面的元素修改
5、增强for循环,同时可以调用其方法
//for 对于对象数组遍历的时候,能否调用对象的方法
String [] str = {"abc","def","ghi"};
for (String s: str){
System.out.println(s.length()); //输出每个元素的长度
}
6、存储自定义 Person 类型
ArrayList<Person> array = new ArrayList<>();
array.add(new Person41("小明",20));
array.add(new Person41("小明",20));
array.add(new Person41("小明",20));
array.add(new Person41("小明",20));
array.add(new Person41("小明",20));
//增强for循环, 但不能更改
for (Person p :array){
System.out.println(p);
}
二、Iterator(接口) 跌代器
1、概述
迭代器是获取所有元素的通用方式
Java中集合有很多种,它们在存储元素时,采用的存储方式不同,而读取的元素的方式也可能不同,那我们要通过一种通用的获取方式来完成。
Colletion 集合元素的通用获取方式,在取元素之前先判断集合中是否有元素,如果有,就把元素取出,如果没有,继续下一次的判断,直到把所有元素都读取出来,这种取出方式专业术语称为迭代。
集合中把这种取元素的方式描述在Iterator接口中,Iterator接口的常用方法如下
![cc4644966baa080c71ee15aa8e761868.png](https://i-blog.csdnimg.cn/blog_migrate/ed7037234c68146cb356226856ac49b9.png)
HasNext() 判断是否有该元素并返回boolean元素
2、迭代器代码
Collection<String> coll = new ArrayList<String>();
coll.add("小明");
coll.add("小王");
coll.add("小李");
coll.add("小红");
coll.add("小张");
//迭代器代码
Iterator<String> it = coll.iterator();
while (it.hasNext()){ //有的话,继续拿一个出来,直到没有
String s1 = it.next();
System.out.println(s1);
}
3、迭代器代码步骤
3-1、创建一个集合
集合的祖先 类型 集合名 集合所属类 类型
Collection<String> coll = new ArrayList<String>();
3-2、往集合中添加元素
coll.add("小明");
coll.add("小王");
coll.add("小李");
coll.add("小红");
coll.add("小张");
3-3、迭代器,对集合中ArrayList 中的元素进行取出
调用集合iterator() 方法获取,Iterator接口的实现类对象
接口引用 类型 名称 = 实现类的对象 通过实现类的调用来获得
Iterator<String> it = coll.iterator();
3-4、接口实现类对象,通过调用hasNext() 来判断集合中是否有该元素
boolean b = it.hasNext();
System.out.println(b); //true 说明接口中有元素
3-5、接口的实现类的对象,调用方法next() 获取集合中的元素
String s = it.next();
System.out.println(s); //此时 获取到第一个元素
3-6、迭代时一个返回执行的内容,使用循环实现,则循环条件时该集合中是否还有元素 使用while循环
while (it.hasNext()){…}
4、图解迭代器
![4df51a22b0d96d8160739d4e6cfa8f7b.png](https://i-blog.csdnimg.cn/blog_migrate/29ba01aa838ce22fb78bbcaedf9e0820.jpeg)
![106c464099622c0a380c9e9752c4f3aa.png](https://i-blog.csdnimg.cn/blog_migrate/d08783247cd045ce646f9fc8ba0ba426.png)
5、注意
在进行集合元素取出时,如果集合中已经没有元素了,还继续迭代器的next方法,将会发生
1、没有元素异常
原因:元素取完之后,在此提取集合中的元素
![e314b63a233b3b4ad6b32c9667caf964.png](https://i-blog.csdnimg.cn/blog_migrate/10a1611669b68d54cb6585538a5cedcd.png)