Itreator 迭代器
Collection集合没有索引,不能用普通的for循环遍历,所以使用Itreator迭代器来遍历集合。
Iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类
对象,获取实现类的方式比较特殊。
Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器的实现类
对象。
Iterator< E > iterator()返回在此collection 的元素上进行送代的迭代器。
返回此集合中的元素的迭代器。 没有关于元素返回顺序的保证(除非这个集合是提供保证的某个类的实例)。
常用方法
返回值为布尔类型的:
- hashNext():判断集合中还有没有下一个元素。有就返回true,没有就返回false
E next():取出集合的下一个元素。返回迭代的下一个元素。
使用步骤
迭代器的使用步骤(重点)∶
- 1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
- 2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
- 3.使用Iterator接口中的方法next取出集合中的下一个元素
迭代器取出集合是一个重复的过程,所以我们可以使用循环,不知道个数用while循环,知道用for循环。
首先要定义Collection集合,使用iterator()获取实现类子对象,是多态的一种。
package setclass.Collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorDemo {//迭代器取出集合
public static void main(String[] args) {
//定义Collection集合
Collection<String> col=new ArrayList<>();
col.add("张三");
col.add("幻世蛮殇");
col.add("仰望天空");
col.add("新疆牧神");
//1.使用Collection接口/集合方法中的itreator()方法来获取迭代器对象的实现类
// 接口 实现类对象
Iterator<String> it=col.iterator();//多态
//2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
//3.使用Iterator接口中的方法next取出下一个元素
//因为一直判断取出重复操作,所以可以使用循环
//while循环
while(it.hasNext()){
String next = it.next();
System.out.println(next);
}
boolean empty = col.isEmpty();
System.out.println("集合是否为空:"+empty);
System.out.println("-----分割线------");
//for循环
for (Iterator<String> it2=col.iterator();it2.hasNext();){
String next = it2.next();
System.out.println(next);
}
}
}
实现原理
Iterator< String> it=col.iterator(); 获取迭代器的实现类对象,并且会把指针(索引)指向集合的-1索引。
it.hasNext() 判断集合中是否由下一个元素
it.next( ) 做了两件事:
- 1.取出下一个元素
- 2.把指针向后移动一位
当没有元素还要取出时,会报NoSuchElementException异常。
增强for循环
底层使用的也为迭代器,简化了迭代器。JDK1.5后的新特性。
collection< E>extends Iterable< E>:所有的单列集合都可以使用增强for
public interface Iterable< T>实现这个接口允许对象成为“foreach”语句的目标。
增强for循环:用来遍历集合和数组
格式:
for(集合/数组的数据类型变量名:集合名/数组名){
sout(变量名);
}