这些是下面的代码中所涉及到的所有方法:
* 迭代概述:
* 集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
* 也就是说,迭代就是遍历
*
* 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方法将那个元素给获取出来
}
}
}