最难忍受的痛苦,也许是想干一件事情而又不去干。——罗曼·罗兰java
本篇文章算是拾人牙慧吧,偶尔谷歌到一个能很好把collection framework design讲好的文档,一是为了总结提高,也是collection framework 的开篇,从设计入手,更透彻的理解这个framework的过去和如今。算法
参照文档是 美国卡内基梅隆大学的Principles of Software Construction这门课程中一节课的课件 - collections design.pdf,建议在看本篇文章前,静下心来通读一遍这个文档。spring
结合本身的理解对collection framework作一个总结。api
Vector
和Hashtable
分别实现了List
和Map
接口)。Vector
和Hashtable
都分别作了重构)。越是基础性的框架,设计文档、API或者是使用性文档越是要通俗易懂,这样基础性框架才便于开发者使用。毕竟你们都不喜欢用黑盒子,至少不会使用本身不了解的东西。数组
特别注意五种文档的完备性:并发
多去听取使用者的意见,很差理解很差用的东西,理解不了,用起来天然不爽。框架
上面说到框架设计应该注意的事项,下面来具体聊一下collection framework design。ide
简言之,我理解有四部分组成:工具
值得一提的是,操做数组的工具类跟集合框架同时添加到Java平台,是集合框架的一个依赖工具。源码分析
集合接口分为两组类型接口,分别为 java.util.Collection
和 java.util.Map
,Map接口的子类严格来讲而不是真实的集合。可是,这些接口包含集合视图操做,使它们能够做为集合进行操做。
随着这么多年的积累迭代,collection framework通过十多年的迭代更新(不是截止到如今,而是java 8 ,2014年),最终接口以下。
Collection 的子接口有:
java.util.Set
java.util.SortedSet
java.util.NavigableSet
java.util.Queue
java.util.concurrent.BlockingQueue
java.util.concurrent.TransferQueue
java.util.Deque
java.util.concurrent.BlockingDeque
Map的子接口有:
java.util.SortedMap
java.util.NavigableMap
java.util.concurrent.ConcurrentMap
java.util.concurrent.ConcurrentNavigableMap
如上,支持并发的接口都定义在 java.util.concurrent
包下,以下:
java.util.concurrent.BlockingQueue
java.util.concurrent.TransferQueue
java.util.concurrent.BlockingDeque
java.util.concurrent.ConcurrentMap
java.util.concurrent.ConcurrentNavigableMap
通用集合实现的效率问题,在后续源码分析过程当中会使用大O标记法来讨论框架插入删除或查找等算法的复杂度。
最后,咱们不是在聊集合的设计吗,是的,包括集合框架中关键的概念,在collections design.pdf中基本上都涉及到了,不作过多的说明,快去看这个文档吧。