集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
collection接口有个iterator()方法,返回迭代器Iterator接口。
public Iterator iterator()
Iterator接口中有三个方法:
- boolean hasNext():如果仍有元素可以迭代,则返回true
- Object Next():返回迭代的下一个元素
- void remove():从迭代器只想的collection中一处迭代器返回的最后一个元素(可选操作)。
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
Iterator it = c.iterator(); //获取迭代器的引用
while(it.hasNext()) { //集合中的迭代方法(遍历)
System.out.println(it.next());
}
Collection c = new ArrayList();
c.add(new Student("张三", 23)); //Object obj = new Student("张三",23);
c.add(new Student("李四", 24));
c.add(new Student("王五", 25));
c.add(new Student("赵六", 26));
//获取迭代器
Iterator it = c.iterator();
while(it.hasNext()) {
//System.out.println(it.next());
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + "..." + s.getAge());
}
注意:只要碰到了集合输出的操作,就一定要使用Iterator接口,因为这是最标准的做法。
1、迭代器原理
迭代器是对集合进行遍历,而每都一个集合内部的存储结构是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,第二,代码有底层内部实现,使用者不用管怎么实现的,会用即可
2、迭代器源码解析
* 1,在eclipse中ctrl + shift + t找到ArrayList类
* 2,ctrl+o查找iterator()方法
* 3,查看返回值类型是new Itr(),说明Itr这个类实现Iterator接口
* 4,查找Itr这个内部类,发现重写了Iterator中的所有抽象方法