一:ArraryList 最终继承超级接口Collection,Colection接口继承Iterator接口。
public interface Collectionextends
而Iterator只有一个方法:
<> 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 Collectionin_ar=new ArrayList ();14 in_ar.add(11);15 in_ar.add(11);16 in_ar.add(11);17 in_ar.add(11);18 Iterator 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 Collectionin_ar=new ArrayList ();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 Collectionin_ar=new ArrayList ();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_new=(ArrayList ) in_ar;20 System.out.print(in_ar_new.get(i));21 }22 }23 }