Iterator迭代器

1. Iterator接口

java.util.Iterator接口作用:遍历集合中的所有元素。

Iterator和Collection、Map接口有所不同:

Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被成为迭代器。

CollectionMap接口主要用于存储元素。

 

获取迭代器的方法:

public Iterator iterator()   // 获取集合对应的迭代器,用来遍历集合中的元素

 

 

迭代的概念:

迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续再判断,如果还有就再取出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

Iterator接口的常用方法如下:

1 public E next()                 // 返回迭代的下一个元素
2 public boolean hasNext()        // 如果仍有元素可以迭代,则返回true

 代码实例

 1 public class Demo06 {
 2     public static void main(String[] args){
 3         Collection coll = new ArrayList();
 4 
 5         coll.add("小明");
 6         coll.add("小红");
 7         coll.add("小刚");
 8         System.out.println(coll);
 9 
10         Iterator it = coll.iterator();
11         if(it.hasNext()){
12             for(int i=0; i<coll.size(); i++){
13                 System.out.print(it.next() + " ");
14             }
15         }
16     }
17 }

/*
tips::在进行集合元素取出时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会发生java.util.NoSuchElementException没有集合元素的错误。
*/

运行结果

[小明, 小红, 小刚]
小明 小红 小刚 

 

 

2. 迭代器的实现原理

   我们在之前案例已经完成了Iterator遍历集合的整个过程。当遍历集合时,首先通过调用集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。

Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了让初学者能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程:

  在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,指向第一个元素,当第一次调用迭代器的next方法时,返回第一个元素,然后迭代器的索引会向后移动一位,指向第二个元素,当再次调用next方法时,返回第二个元素,然后迭代器的索引会再向后移动一位,指向第三个元素,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。

 

3.使用Iterator迭代器删除元素

java.util.Iterator迭代器中有一个方法:

void remove();

注意:Collection的remove方法,无法根据条件删除。

【例】删除一下集合元素中的偶数

 1 public class Demo10 {
 2     public static void main(String[] args){
 3         Collection coll = new ArrayList();
 4         coll.add(1);
 5         coll.add(2);
 6         coll.add(3);
 7         coll.add(4);
 8         coll.add(5);
 9         System.out.println(coll);
10 
11         Iterator iterator = coll.iterator();
12         while(iterator.hasNext()){
13             Integer s = (Integer)iterator.next();
14             if(s%2==0){
15                 iterator.remove();
16             }
17         }
18         System.out.println(coll);
19     }
20 }

运行结果:

[1, 2, 3, 4, 5]
[1, 3, 5]

 

4. 增强for

增强for循环(也称foe each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。

格式:

for(元素的数据类型  变量 : Collection集合or数组){ 
      //写操作代码
}

 

练习1:遍历数组

通常只进行遍历元素,不要在遍历的过程中对数组元素进行修改。

public class NBForDemo1 {
    public static void main(String[] args) {
        int[] arr = {3,5,6,87};
           //使用增强for遍历数组
        for(int a : arr){//a代表数组中的每个元素
            System.out.println(a);
        }
    }
}

 

练习2:遍历集合

通常只进行遍历元素,不要再遍历的过程中对集合元素斤进行增加、删除、替换操作。

 1 public class Demo11 {
 2     public static void main(String[] args){
 3         Collection coll = new ArrayList();
 4         coll.add("小明");
 5         coll.add("小红");
 6         coll.add("小刚");
 7         System.out.println(coll);
 8 
 9         for(Object x : coll){
10             String s = (String)x;
11             System.out.println(x);
12         }
13     }
14 }

运行结果:

1 [小明, 小红, 小刚]
2 小明
3 小红
4 小刚
posted @ 2021-11-17 21:00  白森  阅读(132)  评论(0编辑  收藏  举报