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”,进而验证了两个循环之间的区别所在!*/

 

 

 

 

 

 

 

 

 

posted @ 2022-07-06 15:02  ja不会va  阅读(59)  评论(0)    收藏  举报