244/245迭代器的实现原理和增强for循环
迭代器的实现原理
增强for循环
增强for循环:底层使用的也是迭代器,使用for循环的格式,简化了迭代器的书写是JDK1.5之后出现的新特性
collection<E>extends Iterable<E>:所有的单列集合都可以使用增强for
public interface Iterable<T>实现这个接口允许对象成为“foreach”语句的目标。增强for循环:用来遍历集合和数组
格式:
for(集合/数组的数据类型变量名:集合名/数组名){
sout(变量名);
}
public static void main(String[] args) {
demo02();
demo01();
}
//使用增强for循环遍历集合
private static void demo02(){
ArrayList<String> list = new ArrayList<>();
list.add( "aaa" ) ;
list.add ( "bbb");
list.add( "ccc" );
list.add( "ddd") ;
for (String s : list){
System.out.println(s );
}
}
//使用增强for循环遍历数组
private static void demo01() {
int[] arr = {1,2,3,4,5};
for(int i:arr){
System.out.println(i);
}
}
增强for的底层依赖的是迭代器。 也就是说增强for就是迭代器的简写形式。 下边我们通过案例演示一下: //需求通过增强for遍历list集合。 public static void main(String[]args){ //复习一下如何创建List集合 //1.创建元素对象 List list = new ArrayList(); //添加元素 list.add(10); list.add(20); list.add(30); list.add(40); list.add(50); //遍历集合 for(Object obj : list ){ System.out.println(obj); } }//结果: 10,20,30,40,50
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ForTest { public static void main(String[] args) { // TODO Auto-generated method stub /* 1.普通数组中的使用 */ int array[] = { 1,2,3,4,5,6,7,8,9}; // 增强for循环 for (int item : array) { System.out.println(item); } // 普通for循环 for (int i = 0; i < array.length; i++) System.out.println(array[i]); /* 2.二维数组中的使用 */ int array2[][] = {{1,2,3}, {4,5,6}, {7,8,9} }; // 增强for循环 for (int arr[] : array2) { for (int item : arr) { System.out.println(item); } } // 普通for循环 for (int i = 0; i < array2.length; i++) { for (int j = 0; j < array2[i].length; j++) { System.out.println(array2[i][j]); } } /* 3.List中的使用 */ List<String> list = new ArrayList<String>(); list.add("我"); list.add("爱"); list.add("中"); list.add("国"); // 增强for循环 for (String item : list){ System.out.println(item); } //普通for循环 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } //迭代器遍历 Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
区分普通for循环和增强for循环
(一):增强for循环,不改变arr[]的值 例: for (String s : arr){ s = "GG"; } (二):普通for循环,改变了arr[]中的值 例: for (int i = 0; i < arr.length; i++) { arr[i] = "GG"; }
@Test public void test3(){ String[] arr = new String[]{"MM","MM","MM"}; for (String s : arr){ s = "GG"; } for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } for (int i = 0; i < arr.length; i++) { arr[i] = "GG"; } for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } }
@Test public void test4(){ String[] str = new String[5]; for (String myStr : str) { myStr = "hao"; System.out.println(myStr);//五个"hao" } for (int i = 0; i < str.length; i++) { System.out.println(str[i]);//五个“null” } }
/*上面实例的输出的结果也可以看出,增强型for循环内部用输出语句输出时能显示五个“hao”,由于增强型for循环是不改变数组本身的元素值,所以在外部用普通for循环输出的为“null”,进而验证了两个循环之间的区别所在!*/