您的位置:首页 > 编程语言 > Java开发

Java基础知识强化之集合框架笔记11:Collection集合之迭代器的原理及源码解析

2015-10-01 22:24 776 查看
1. 迭代器为什么不定义成一个类,而是定义为一个接口 ?

答:假设迭代器定义的是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历。但是呢? 我们想想,Java中提供了很多的集合类,而这些集合类的数据结构是不同的,所以,存储的方式和遍历的方式应该是不同的。进而它们的遍历方式也应该不是一样的,最终,就没有定义迭代器类。

而无论你是哪种集合,你都应该具备获取元素的操作,而且,最好在辅助于判断功能,这样,在获取前,先判断。这样的话就不容易出错。也就是说,判断功能和获取功能应该是一个集合遍历所具备的,而每种集合的方式又不太一样,所以我们把这两种功能给提取出来,并不提供具体实现,这种方式就是接口。

2. 那么真正的具体实现类在哪里呢?

答:在真正的具体的子类中,以内部类的方式体现的。

3. 迭代器的源码:

 public interface Iterator {
boolean hasNext();
Object next();
}

public interface Iterable {
Iterator iterator();
}

public interface Collection extends Iterable {
Iterator iterator();
}

public interface List extends Collection {
Iterator iterator();
}

public class ArrayList implements List {
public Iterator iterator() {
return new Itr();
}

private class Itr implements Iterator {
public boolean hasNext() {}
public Object next(){}
}
}

Collection c = new ArrayList();
c.add("hello");
c.add("world");
c.add("java");
Iterator it = c.iterator();     //new Itr();
while(it.hasNext()) {
String s = (String)it.next();
System.out.println(s);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: