(1)类实现了Iterable接口,说明这个类具备产生迭代器,被迭代的功能和能力。
public interface Iterable<T> {
/**
* Returns an iterator over a set of elements of type T.
*
* @return an Iterator.
*/
Iterator<T> iterator();
}
需实现Iterable中的Iterator方法。Iterator接口类中,声明了执行迭代操作操作的haveNext(),next(),remove(),方法。
(2)Iterator.java接口,才是具体迭代操作的实现
例子说明(流程实现上蹩脚,只是说明使用的方法)
public class IterableTest {
public static void main(String[] args) {
Students ss = new Students();
ss.add(new Student(20, "zhangsan"));
ss.add(new Student(21, "lisi"));
ss.add(new Student(22, "wangwu"));
/* 被迭代的对象应实现Iterable接口 */
for (Student s : ss) {
System.out.println(s);
}
}
}
/**
* 学生集合类【被迭代的对象实现Iterable接口】
*/
class Students implements Iterable<Student> {
List<Student> ss = new ArrayList<Student>();
public void add(Student s) {
ss.add(s);
}
/**
* 需实现Iterable接口中的iterator方法,该方法返回Iterator接口的实现
*/
@Override
public Iterator<Student> iterator() {
return new StudentIterator(ss);
}
}
class StudentIterator implements Iterator<Student> {
int index = 0;
List<Student> ss = null;
public StudentIterator(List<Student> ss) {
this.ss = ss;
}
@Override
public boolean hasNext() {
return index < ss.size();
}
@Override
public Student next() {
Student s = ss.get(index);
index++;
return s;
}
@Override
public void remove() {
ss.remove(index);
}
}
/**
* 学生类
*/
class Student {
int age;
String name;
public Student(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "name : " + name + ";age : " + age;
}
}