Java基础知识强化之集合框架笔记11:Collection集合之迭代器的原理及源码解析
2015-10-01 22:24
776 查看
1. 迭代器为什么不定义成一个类,而是定义为一个接口 ?
答:假设迭代器定义的是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历。但是呢? 我们想想,Java中提供了很多的集合类,而这些集合类的数据结构是不同的,所以,存储的方式和遍历的方式应该是不同的。进而它们的遍历方式也应该不是一样的,最终,就没有定义迭代器类。
而无论你是哪种集合,你都应该具备获取元素的操作,而且,最好在辅助于判断功能,这样,在获取前,先判断。这样的话就不容易出错。也就是说,判断功能和获取功能应该是一个集合遍历所具备的,而每种集合的方式又不太一样,所以我们把这两种功能给提取出来,并不提供具体实现,这种方式就是接口。
2. 那么真正的具体实现类在哪里呢?
答:在真正的具体的子类中,以内部类的方式体现的。
3. 迭代器的源码:
答:假设迭代器定义的是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历。但是呢? 我们想想,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); }
相关文章推荐
- java commons.lang3 ArrayUtils使用
- 初入JAVAMAIL之如何能运用其文件笔记
- 熟练知道eclipse中outline里各个图标的含义
- Java入门01
- Java中的委托模式
- 如何让eclipse在程序修改后,点击运行可以自动保存。
- JavaAPI_3
- java robot机器人
- 惠普实训第一阶段总结,java项目总结,第二阶段计划
- Java日期操作(包含Java8)
- 用java在mysql中随机插入9000 000条数据
- java native方法及JNI实例
- java语言基础(二)
- java13:递归
- JAVA基础--db19_javaIO流缓冲区
- JDK配置
- Java基础知识强化之集合框架笔记10:Collection集合使用的步骤
- Java 使用urlconnection下载文件或图片并保存到本地
- 用递归判断一个数组是否递增 JAVA代码
- Java基础知识强化之集合框架笔记09:Collection集合迭代器使用的问题探讨