最难忍受的痛苦,也许是想干一件事情而又不去干。——罗曼·罗兰

前言

本篇文章算是拾人牙慧吧,偶然谷歌到一个能很好把collection framework design讲好的文档,一是为了总结提升,也是collection framework 的开篇,从设计入手,更透彻的明白这个framework的已往和现在。

参照文档是 美国卡内基梅隆大学的Principles of Software Construction这门课程中一节课的课件 - collections design.pdf,建议在看本篇文章前,静下心来通读一遍这个文档。

连系自己的明白对collection framework做一个总结。

设计目的

  • 小且简朴。
  • 易扩展。
  • 与之前存在的聚集兼容(事实上也做到了,VectorHashtable划分实现了ListMap接口)。
  • 很强的相似性(这个是从易用性角度来思量的,由于在学习器械的时刻,相似的器械是不需要重新学起的,学习成本自然降低了许多,后续源码剖析先纵向深入,再横向类比)。

API设计准则

  • 通用性,制止使用牢固聚集元素(事实上使用泛型来实现)。
  • 与旧API的兼容性(VectorHashtable都划分做了重构)。

文档的重要性

越是基础性的框架,设计文档、API或者是使用性文档越是要通俗易懂,这样基础性框架才便于开发者使用。究竟人人都不喜欢用黑盒子,至少不会使用自己不领会的器械。

特别注重五种文档的完整性:

  • 设计文档
  • 概览文档
  • API文档 - 不仅仅是javadoc
  • 使用教程文档
  • jira list

使用者的意见

多去听取使用者的意见,欠好明白欠好用的器械,明白不了,用起来自然不爽。

上面说到框架设计应该注重的事项,下面来详细聊一下collection framework design。

框架概览

简言之,我明白有四部门组成:

  1. 井井有条的接口和抽象类。
  2. 接口和抽象类的通用实现或完全实现。
  3. 基础算法。
  4. 并发支持(默认是不支持并发的,厥后添加了对聚集的封装,但只是简朴的包装,效率不高,尤其是随着并发手艺的生长,并发粒度越来越小,提供了许多juc的聚集实现,逐渐废弃了聚集框架中的原来的并发聚集)。

值得一提的是,操作数组的工具类跟聚集框架同时添加到Java平台,是聚集框架的一个依赖工具。

API实现

聚集接口分为两组类型接口,划分为 java.util.Collectionjava.util.Map,Map接口的子类严格来说而不是真实的聚集。然则,这些接口包罗聚集视图操作,使它们可以作为聚集举行操作。

随着这么多年的积累迭代,collection framework经由十多年的迭代更新(不是停止到现在,而是java 8 ,2014年),最终接口如下。

Collection 的子接口

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的子接口

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标记法来讨论框架插入删除或查找等算法的复杂度。

总结

  • 一个好的框架设计,不仅要相符API的设计原则,也要思量易用性,兼容性。
  • 多听取使用者的意见
  • 不管是框架的开发者照样使用者,都应该注重文档的使用

最后,我们不是在聊聚集的设计吗,是的,包罗聚集框架中要害的观点,在collections design.pdf中基本上都涉及到了,不做过多的说明,快去看这个文档吧。

,

Sunbet

Sunbet www.sumeruminecraft.com Sunbet是Sunbet的大型娱乐网站,Sunbet简单快捷,业内口碑极好,是你的最佳选择。sunbet,就是要您玩得开心,赢得更开心!

Allbet Gaming声明:该文看法仅代表作者自己,与阳光在线无关。转载请注明:保定租房:learn from collection framework design
发布评论

分享到:

绥化物流:女歌手自曝有染 内马尔坚决否认
1 条回复
  1. 皇冠会员APP
    皇冠会员APP
    (2020-05-11 01:42:27) 1#

    阳光在线:www.cd799.com(原诚信在线)现已开放阳光在线手机版下载。阳光在线游戏公平、公开、公正,用实力赢取信誉。就服你了

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。