前言
经典的 Java 业界最佳实现数据结构主要有 List,Set,Map,通过各自不同的特性与方法来维护数据。以下就以这三种数据结构渐渐展开。List,Set 都是针对一组相同类型的对象的数据结构,以下成为 组数据结构 ,Map 则是另一种 字典数据结构 。本人才疏学浅,主要是一些自学经验总结,可能路子比较野,如有错误,望各位批评指正,共同进步,感谢。
接口类型
在 Java 8 数据结构这块的源码中,按我自己的理解,主要有四种类型的接口
- 第一种是 数据结构接口 ,比如 Collection、List、Set、Map,这些接口抽象出此类数据结构都需要实现的方法。
- 第二种是 能力接口 ,与 能力器接口 相对应,Java 对于数据结构的实现很多时候都使用了这种模式,比如 Iterable 和 Iterator,Comparable 和 Comparator,主要是出于三种考虑:
(1)一种必须要实现的声明,赋予数据结构某种能力,但是并不代表这种组数据就可以使用这种能力了,只是对外声明我与我的子类有这种能力,至于他们自己怎么实现,我还不知道,因为它们的特性不同。
(2)遵从单一职责原则与合成敷用原则,数据结构类作为一种集合结构,只需要关心与集合有关的宏观操作,比如大小,清空,比较。以 Iterable 和 Iterator 为例,迭代并不属于宏观操作,可以将它分离出去。之后对于接口的扩展与维护也更加方便。
(3)遵从迪米特法则,当使用一种数据结构时,对它内部的实现知道的越少越好,还是以 Iterable 和 Iterator 为例,Iterator 使所有拥有遍历能力的数据结构统一向外提供相同的遍历方法(实现不同),屏蔽了其内部构造。 - 第三种是 能力器接口 ,对应各自的 能力接口 ,将每种数据结构都需要实现的某些与宏观结构无关的方法,抽象出来。
- 第四种是Java 8 的中的新特性之一, 函数式接口 ,由于这种接口只能有一个抽象方法,通常是定义某种行为,每次调用时的实现都不同,需要传递方法实现,它们包括单不限于函数式接口,也可能是通过函数式接口的组合实现某种行为,所以我称它们为 行为接口
接口类型 | 代表接口 |
数据结构接口 | Collection、List、Set、Map |
能力接口 | Iterable、Comparable |
能力器接口 | Iterator、Comparator |
行为接口 | Consumer、Predicate、Function、Stream |
以上就是对 Java 8 数据结构中出现的接口的大致分类,下一篇将对 Java 8 中的新特性做一下简单的介绍