iterator迭代器
迭代器的定义和使用
想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下获取迭代器的方法【Collection接口中有一个方法】:
1 public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的。
public E next()
:返回迭代的下一个元素。
public boolean hasNext()
:如果仍有元素可以迭代,则返回 true。
使用步骤:
1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
Iterator<E>接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型
2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
3.使用Iterator接口中的方法next取出集合中的下一个元素
1 import java.util.ArrayList; 2 import java.util.Collection; 3 import java.util.Iterator; 4 5 public class Demo01Iterator { 6 public static void main(String[] args) { 7 //创建一个集合对象 8 Collection<String> coll = new ArrayList<>(); 9 //往集合中添加元素 10 coll.add("姚明"); 11 coll.add("科比"); 12 coll.add("麦迪"); 13 coll.add("詹姆斯"); 14 coll.add("艾弗森"); 15 16 /* 17 1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态) 18 注意: 19 Iterator<E>接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型 20 */ 21 //多态 接口 实现类对象 22 Iterator<String> it = coll.iterator(); 23 24 25 /* 26 发现使用迭代器取出集合中元素的代码,是一个重复的过程 27 所以我们可以使用循环优化 28 不知道集合中有多少元素,使用while循环 29 循环结束的条件,hasNext方法返回false 30 */ 31 while(it.hasNext()){ 32 String e = it.next(); 33 System.out.println(e); 34 } 35 36 37 38 // 下面的代码是一个一个在判断取。 39 // 如果判断为false任然使用next方法取抛出NoSuchElementException异常 40 41 /* //2.使用Iterator接口中的方法hasNext判断还有没有下一个元素 42 boolean b = it.hasNext(); 43 System.out.println(b);//true 44 //3.使用Iterator接口中的方法next取出集合中的下一个元素 45 String s = it.next(); 46 System.out.println(s);//姚明 47 48 b = it.hasNext(); 49 System.out.println(b); 50 s = it.next(); 51 System.out.println(s); 52 53 b = it.hasNext(); 54 System.out.println(b); 55 s = it.next(); 56 System.out.println(s); 57 58 b = it.hasNext(); 59 System.out.println(b); 60 s = it.next(); 61 System.out.println(s); 62 63 b = it.hasNext(); 64 System.out.println(b); 65 s = it.next(); 66 System.out.println(s); 67 68 b = it.hasNext(); 69 System.out.println(b);//没有元素,返回false 70 s = it.next();//没有元素,在取出元素会抛出NoSuchElementException没有元素异常 71 System.out.println(s);*/ 72 } 73 } 74
迭代器原理
在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。
原理图:
增强for
Collection<E>extends Iterable<E>:所有的单列集合都可以使用增强for
public interface Iterable<T>:实现这个接口允许对象成为 "foreach" 语句的目标。
语法:
1 for(元素的数据类型 变量 : Collection集合or数组){ 2 //写操作代码 3 }
1 import java.util.ArrayList; 2 3 public class Demo02Foreach { 4 public static void main(String[] args) { 5 demo02(); 6 } 7 8 //使用增强for循环遍历集合 9 private static void demo02() { 10 ArrayList<String> list = new ArrayList<>(); 11 list.add("aaa"); 12 list.add("bbb"); 13 list.add("ccc"); 14 list.add("ddd"); 15 for(String s : list){ 16 System.out.println(s); 17 } 18 } 19 20 //使用增强for循环遍历数组 21 private static void demo01() { 22 int[] arr = {1,2,3,4,5}; 23 for(int i:arr){ 24 System.out.println(i); 25 } 26 } 27 }
泛型
--------------------