集合遍历的方式
Iterator迭代器
2.1 Iterator接口
Iterator接口对数组进行遍历
在程序开发中,经常需要遍历集合中的所有元素。针对需求,JDK专门提供了一个接口java.util.Iterator
.Iterator接口也是java结合中的一员。
Collection接口与Map接口主要用于储存元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器
java.util.Iterator接口:迭代器(对接口进行遍历)
有两个常用方法
boolean hasNext() 如果仍有元素可以迭代,则返回 true
就是判断集合中还有没有下一个元素,有就返回 true ,没有就返回false
E next() 返回迭代的下一个元素
--> 取出集合中的下一个元素。
Iterator迭代器,是一个接口,无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊。
Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器得到实现类对象
Iterator
使用步骤(重点)
-
使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)。
注意:
Iterator
接口中也是有泛型的,迭代器的泛型和集合的一致。 -
使用Iterator接口中的方法hasNext判断还有没有下一个元素
-
使用Iterator接口中的方法next取出集合中的下一个元素
public class Demo02Iterator {
public static void main(String[] args) {
// 创建一个集合对象
Collection<String> coll = new ArrayList<>();
// 往集合中添加元素
coll.add("姚明");
coll.add("科比");
coll.add("詹姆斯");
coll.add("麦迪");
coll.add("艾弗森");
/*
* 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)。
注意:
Iterator<E> 接口中也是有泛型的,迭代器的泛型和集合的一致。
* */
// 多态 接口 实现类对象
Iterator<String> it = coll.iterator();
// 或者使用循环
// while循环
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
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);
// 3. 使用Iterator接口中的方法next取出集合中的下一个元素
String s = it.next();
System.out.println(s);
s = it.next();
System.out.println(s);
s = it.next();
System.out.println(s);
s = it.next();
System.out.println(s);
s = it.next();
System.out.println(s);
b = it.hasNext();
System.out.println(b);
*/
}
}
2.2 迭代器的实现原理
我们在之前案例已经完成了Iterator遍历集合的整个过程。当遍历集合时,首先通过调用t集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。
Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了让初学者能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程:
{{uploading-image-598408.png(uploading...)}}
在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。
2.3 增强for
增强for循环:底层使用的是迭代器,使用for循环的格式简化了迭代器的书写
是JDK1.5之后出现的新特性
Collection
public interface Iterable
增强for循环:用来遍历集合和数组
格式
For(集合/数组的数据类型 变量名 :数组名/集合名){
// 操作代码
}
它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。
练习1:遍历数组
public static void main(String[] args) {
int[] arr = {1,2,3,5,6,9};
// 使用增强for遍历数组
for(int i:arr){
// i 代表数组中的每个元素
System.out.println(i);
}
}
练习2:遍历集合
public static void main(String[] args) {
Collection<String> coll = new ArrayList<String>();
coll.add("神婆");
coll.add("巫女");
coll.add("神算子");
// 使用增强for遍历
for(String str:coll){
// 接收变量str代表被便利的集合元素
System.out.println(str);
}
}
tips: 新for循环必须有被遍历的目标。目标只能是Collection或者是数组。新式for仅仅作为遍历操作出现。