Java——集合的遍历之迭代遍历

这些是下面的代码中所涉及到的所有方法:
 * 迭代概述:
 *      集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
 *      也就是说,迭代就是遍历
 * 
 * public interface Iterator<E> 对 collection 进行迭代的迭代器
 * Iterator<E> iterator()返回在此 collection 的元素上进行迭代的迭代器
 * java.util 接口 Iterator<E>
 * 
 * boolean hasNext()如果仍有元素可以迭代,则返回 true
 * 
 * E next()返回迭代的下一个元素
 * 
 * void remove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)   
package com.wsq.bean;
//创建一个自定义Student类
public class Student {
    private String name;
    private int age;

    public Student() {
        super();
    }

    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setNaem(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {      //这里得重写toString方法
        return "Student [naem=" + name + ", age=" + age + "]";
    }

}
package com.wsq.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import com.wsq.bean.Student;
public class Demo5_Iterator {
    public static void main(String[] args) {
        demo1();                                //迭代已经提供好的String类对象
        demo2();                                //迭代一个自定义对象,自己创建类,然后创建对象存储集合里,然后迭代 

    }

private static void demo2() {
    Collection c = new ArrayList();            //创建集合c
    c.add(new Student("张三",23));               //向集合c里面添加Student类对象即new Student("张三",23)
    c.add(new Student("李四",24));               //object obj = new Student("李四",24);  父类引用指向子类对象
    c.add(new Student("王五",25));               //由于多态的弊端导致obj不能调用子类特有的属性和行为
    c.add(new Student("赵六",26));

    Iterator it = c.iterator();                //获取迭代器,迭代的时候,获取到的都是Object类型
    while(it.hasNext()){                       //boolean hasNext()如果仍有元素可以迭代,则返回 true,进行循环判断集合是否还含有元素

        //System.out.println(it.hasNext());     //调用它的toString方法

        Student s = (Student)it.next();         //向下转型,由Object类向下转型成为Student类
        //当把Student对象给添加进来的时候,会进行一个类型的提升Student对象变成了Object类
        System.out.println(s.getName() + "..." + s.getAge()); 
                                                //通过s就可以调用它的getName和getAge方法
    }
}

public static void demo1(){               //迭代已经提供好的String类对象
        Collection c = new ArrayList();       //创建集合c
        c.add("a");                           //向集合c添加元素
        c.add("b");
        c.add("c");
        c.add("d");


        //对集合中的元素迭代(遍历)
        Iterator it = c.iterator();            //获取迭代器;获取迭代器之后,就可以使用迭代器里面的方法


        /*
        boolean b1 = it.hasNext();            //判断集合中是否有元素,有就返回true
        Object obj1 = it.next();               //E next()返回迭代的下一个元素,通过next方法将那个元素给获取出来
        System.out.println(b1);                //很显然,集合c中有4个元素,a,b,c,d,所以输出结果为true
        System.out.println(obj1);              //返回下一个元素,就是第一个元素,所以输出结果为 a

        boolean b2 = it.hasNext();            //判断集合中是否有元素,有就返回true
        Object obj2 = it.next();               //E next()返回迭代的下一个元素,通过next方法将那个元素给获取出来
        System.out.println(b2);                //很显然,集合c中有4个元素,a,b,c,d,所以输出结果为true
        System.out.println(obj2);              //返回下一个元素,这里就成为了第二个元素,所以输出结果为 b
        //通过这两次的输出,可以得出next方法可以将指针向后移动一位,第一次获取的是a,然后,又调用了一次next,第二次获取了b...
        //这样写太磨叽了,这里有4个元素,代码得重复4次,如果100个元素,那么这样写,代码会特别的磨叽
        */


        while(it.hasNext()){                    //boolean hasNext()如果仍有元素可以迭代,则返回 true,进行循环判断集合是否还含有元素
                                                //通过while循环,利用hasNext这个方法来判断是否有元素
            System.out.println(it.next());      //有元素的话,调用next方法,调用一次,指针就会向后移动一次,然后输出该元素即可
        //E next()返回迭代的下一个元素,通过next方法将那个元素给获取出来
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41264055/article/details/81289308