一: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 }