java集合---迭代器iterator

一:ArraryList  最终继承超级接口Collection,Colection接口继承Iterator接口。

public interface Collection<E>
extends Iterable<E>

而Iterator只有一个方法:

Iterator<T> iterator()

在ArraryList实现类中有对方法的重写,返回当前实现类的迭代器对象(Returns an iterator over a set of elements of type T.)。

 1 package test08;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 import java.util.Iterator;
 6 
 7 public class iter_demo {
 8     public  static void  main(String...args){
 9         iter_test();
10 
11     }
12     public static  void iter_test(){
13         Collection<Integer> in_ar=new ArrayList<Integer>();
14         in_ar.add(11);
15         in_ar.add(11);
16         in_ar.add(11);
17         in_ar.add(11);
18         Iterator<Integer> in_it=in_ar.iterator();
19         while (in_it.hasNext()){
20             System.out.print(in_it.next());
21         }
22     }
23 }

其中:hasNnext()判断迭代器中是否还有下一个数组元素。

next()表示获取下个数组元素。

迭代器实现原理类似内存指针,hasNext每次判断下个元素是否为空,即指针指向下个元素,有就返回true否则返回false。

二、增强for

语法: for(type  变量:可迭代的对象){

      代码块

    }

增强for虽然能减少代码的量,但是弊端也明显,无法操作索引。

上面例子不采用迭代器:

 1 package test08;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 import java.util.Iterator;
 6 
 7 public class iter_demo {
 8     public  static void  main(String...args){
 9         iter_test();
10 
11     }
12     public static  void iter_test(){
13         Collection<Integer> in_ar=new ArrayList<Integer>();
14         in_ar.add(11);
15         in_ar.add(11);
16         in_ar.add(11);
17         in_ar.add(11);
18         for(Integer i:in_ar){
19             System.out.print(i);
20         }
21     }
22 }

 如果想要操作索引,还得使用传统的for。

 1 package test08;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 import java.util.Iterator;
 6 
 7 public class iter_demo {
 8     public  static void  main(String...args){
 9         iter_test();
10 
11     }
12     public static  void iter_test(){
13         Collection<Integer> in_ar=new ArrayList<Integer>();
14         in_ar.add(11);
15         in_ar.add(11);
16         in_ar.add(11);
17         in_ar.add(11);
18         for(Integer i=0;i<in_ar.size();i++){
19             ArrayList<Integer> in_ar_new=(ArrayList<Integer>) in_ar;
20             System.out.print(in_ar_new.get(i));
21         }
22     }
23 }
原文地址:https://www.cnblogs.com/evilliu/p/7837742.html