数组、集合常见遍历方法

一、for循环

数组的遍历:数组的for循环主要是通过arr.length,来获取数组的长度,使用for循环进行,进行循环,获取出每一个数组元素,打印元素。 

/**
     * 通过基本的for循环进行遍历
     */
    public static void traverseByFor(int[] arr) {
        if (arr == null) {//首先判定数组是否为空
            return;
        }

        System.out.println("以下是通过基本for循环的遍历结果");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

集合遍历:list集合的for循环主要是通过list.length(),来获取集合的长度,使用for循环进行,进行循环,获取出每一个集合元素,打印元素。 

//常用遍历list集合的方式
        List<String> list=new ArrayList<String>();//定义一个字符串类型的集合
        list.add("D");//分别向集合中加入A、B、C、D四个元素
        list.add("B");
        list.add("A");
        list.add("C");
        System.out.println("常规for循环结果:");
        for(int i=0;i<list.size();i++){//遍历list集合
            System.out.println(list.get(i));
}

二、Iterator构造器

1.Iterator构造器的概述:

public Iterator<E> iterator():获取一个迭代器,用于遍历集合中的元素。

for遍历循环元组 python for循环遍历数组元素_for遍历循环元组 python

2.使用Iterator构造器的注意事项和常见问题
1)注意事项:Iterator迭代器是一次性的,单向的,只能由集合的头部元素向尾部元素遍历,反向则不行。
              

public class Demo02 {
                    public static void main(String[] args) {
                        //1.创建一个集合对象
                        ArrayList<String> list = new ArrayList<>();
                        list.add("杨幂");
                        list.add("柳岩");
                        list.add("迪丽热巴");
                        list.add("高圆圆");

                        //2.获取一个"迭代器"对象
                        Iterator<String> it = list.iterator();
              while (it.hasNext()) {//判断是否有元素可以迭代,使用while循环,使用it.next获取元素
                            System.out.println(it.next());//获取一个元素
                        }
                    }
                }

        2).Iterator迭代器操作的常见问题:
            A.一次的hasNext(),多次的next()

//1.一次的hasNext(),多次的next()
                Iterator<String> it2 = list.iterator();
                while (it2.hasNext()) {//一次hasNext()
                    String s = it2.next();//一次next()
                    //System.out.println(s);
                    System.out.println(it2.next());//第二次的next(),很危险,可能会抛异常
                }

         B.并发修改异常:通过迭代器遍历的时候,然后通过集合对象修改集合的长度。
                

//2.并发修改异常
                Iterator<String> it = list.iterator();
                while (it.hasNext()) {
                    String s = it.next();
                    System.out.println(s);

                    //判断元素,并删掉元素
                    if ("高圆圆".equals(s)) {
                        //list.remove(s);//不要通过"集合对象"删除
                        it.remove();//要通过"迭代器对象"删除
                    }
                }

三、增强for循环:

      在JDK5以前的版本中,遍历数组或集合中的元素,需要先获得数组的长度或集合的迭代器,比较麻烦。JDK5中定义了一种新的语法----增强for循环,以简化此类操作。增强for循环只能用在数组或实现Iterable接口的集合上。

语法格式:

for(变量类型 变量:需迭代的数组或集合){
//变量类型指的是数组中的元素后者集合中的对象的的数据类型
//变量指的是数组中的元素或者集合中对象
//需要迭代的数组或集合就是我们想要迭代或者循环的集合
}

增强for循环遍历集合示例代码:
          

public class Demo03 {
                public static void main(String[] args) {
                    //1.创建一个集合对象
                    Collection<String> list = new ArrayList<>();
                    list.add("杨幂");
                    list.add("柳岩");
                    list.add("迪丽热巴");
                    list.add("高圆圆");

                    for (String s : list) {
System.out.println(s);
//语法糖,编译后,就是:迭代器
//我们对以下代码进行反编译:
//反编译后:
//Integer i;
//for(Iterator iterator = list.iterator(); 
//iterator.hasNext(); 
//System.out.println(i)){
//i = (Integer)iterator.next();
//}
//
//反编译后的代码其实比较复杂,我们按照执行顺序拆解一下:

//Integer i; 定义一个临时变量i

//Iterator iterator = list.iterator(); 获取List的迭代器

//iterator.hasNext(); 判断迭代器中是否有未遍历过的元素

//i = (Integer)iterator.next(); 获取第一个未遍历的元素,赋值给临时变量i

//System.out.println(i) 输出临时变量i的值

//如此循环往复,直到遍历完List中的所有元素。

//通过反编译,我们看到,其实JAVA中的增强for循环底层是通过迭代器模式来实现的。
}

增强for循环遍历数组示例代码:

int[] arr = {1, 32, 4, 252, 42, 5};
for (int i : arr) {//语法糖,编译后,就是:普通for循环
  System.out.println(i);
 }
 }
}