Java Collections Framework——把所有的皮鞋都拿出来擦一擦
2018-02-26 12:06 Essense&&Root 阅读(247) 评论(0) 收藏 举报# Java合集框架的结构
Java合集框架的设计是使用接口,抽象类和具体类的一个很好的例子。
用接口定义框架。抽象类提供这个接口的部分实现。具体类用具体的数据结构实现这个接口。
Collection是处理对象合集的根接口。AbstractCollction类提供Collection接口的部分实现。除了add, size和iterator方法之外,它实现了Collection接口中的所有其他方法。
add, size和iterator等方法在合适的子类中实现。
!!!如果某个方法在子类中没有意义,可以throw new UnsupportedOperationException("Method not supported");
!!!除了java.util.PriorityQueue没有实现Cloneable接口外,Java合集框架中所有其他具体类都实现了java.lang.Cloneable和java.io.Serializable接口。
因此,除了优先队列,所有Cloneable的实例都是可克隆的,可序列化的。
# 迭代器
Iterator 是一种经典的设计模式,用于遍历一个数据结构。
Iterator接口为遍历各种类型的合集中的元素提供了一种统一的方法。
首先,Collection 接口继承自Iterable 接口,这意味着——所有Collection 都是可迭代的。这在意义上达成了可迭代。
Iterable 接口中定义了 iterator 方法,该方法会返回一个迭代器。
到这里,我们拿到了该集合的一个迭代器。
迭代器中包含三个方法,用于遍历元素。
hasNext() // 如其名, has next?
next() // 返回下一个元素
remove()
传统的遍历一个合集中的元素是比较麻烦的
for(int i = 0; i < arr.length; i++){ // polish a shoe }
有了所谓迭代器,就可以foreach Iterable 的所有实例。(foreach 循环可以用于数组)
for(String ele : collection){ // polish shoe }
我到没感觉到它方便了多少。
顺便提一下,Lisp 和 Python 中提供的一种遍历模式——map。(对表的映射)
map 是一个高阶函数,map(proc, list)
proc 是一个过程,定义了对元素的某种操作/变换,map会将 proc 应用到 list 中的每个元素,然后将处理结果收集进一个 list 返回。
表——表 的变换,这是一种更高层次的抽象和思考。
浙公网安备 33010602011771号