Java集合框架中隐藏的设计套路.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java集合框架中隐藏的设计套路

Java集合框架中隐藏的设计套路 最近突然想到了一个驴子和胡萝卜不得不说的故事。说是一个人坐在驴子背上,用一根长杆绑着一根胡萝卜,然后把胡萝卜悬到驴子的面前,驴子以为只要向前走一步就可以吃到胡萝卜,于是不停地向前走,可是它始终无法吃到这根萝卜。 一千个读者就有一千个哈姆雷特,当然不同的人对这个故事也会有不同的理解。比如我们为了生活拼命地工作,却永远达不到财务自由,我们是不是也像一只忙碌的“驴子”呢? 所以,我们的世界不应该只有“胡萝卜”。 不识庐山真面目,只缘身在此山中。有时候跳出来,用“上帝视角”来看看这个我们存在的世界,说不定会有不一样的发现。生活如此,学习也是如此。 数据结构和算法与Java集合框架 接下来我们再来看一个故事。本故事纯属虚构,如有雷同,纯属你抄我。 时间:2017/01/11 地点:A公司办公室 人物:小明——一个工作一年的Android小菜鸟;B大大——A公司Android开发负责人,Android高级开发工程师 起因:小明想到A公司工作,由B大大对他进行面试。 经过:B大大说,小明啊,你刚毕业一年,算法应该还不错,咱们先来一个简单的吧。有一个迷宫,由n行m列的单元格组成,每一个单元格要么是空地要么是障碍物,障碍物是不能穿过的。任取两个不是障碍物并且不相同的点p和q,怎么找到p到q的最短路径呢? 小明支支吾吾,边挠头边说,那个B大大,我上学的时候贪玩没有好好学数据结构和算法,毕业后工作中也基本没有用到过,所有不怎么会了。。。 B大大露出一副安慰的表情,说,恩,可以理解。那咱们问点工作中常用的吧。 小明顿时来了精神,一顿小鸡啄米似的点头。 B大大说,那你先说说你工作中接触到的数据结构吧。 小明张口就来,数组、ArrayList、Map。 B大大又等了一会,看小明实在没有了下文,又继续问道,那你了解Java集合框架的设计思路吗? 小明说,设计思路?为什么要了解,没时间啊,老夫写代码就是一把梭!复制、粘贴,拿起键盘就是干!效率刚刚的。 B大大心里一万只羊驼飞奔而过,嘴角抖了抖,说,那个小明,咱们今天的面试就先到这吧,有结果了我再让Hr通知你好吧。 然后,然后就没有然后了。 虽然这个故事是虚构的,但是不难找出来现实版的小明求职记。那么从这个故事我们可以反思一些什么呢? 首先个人认为数据结构和算法、设计模式这些属于内功,俗话说练拳不练功,到老一场空,有了这些内功我们才能更好的去使用各种招式,否则只是徒有其形罢了。要知道一个花架子是没有多少战斗力的。 其次,了解了源码里的设计思路,用起来才能更得心应手,同时也能提高自己的设计能力。而且就像开篇说的,我们要善于从宏观的角度去看一些事情,这样才能看到更多,收获更多。当然成长为高级工程师,迎娶白富美,走向人生巅峰不是梦啦。 数据结构和算法 这里我不打算再过多的重复数据结构和算法的定义、算法的时空复杂度这些问题,只过一下各个数据结构的特性。因为算法对数据结构的通用操作类似,基本都包括插入、查找、删除、遍历和排序等,所以我们重点关注下这些操作上的性能。 数组:优点是插入块,如果知道下标,可以非常快的存取。缺点是查找慢,删除慢,大小固定。 有序数组:优点是比无序数组查找快。缺点是插入和删除慢,大小固定。 栈:提供后进先出方式的存取。缺点是存取其他项很慢。 队列:提供先进先出方式的存取。缺点是存取其他项很慢。 链表:优点是插入快,删除快。缺点是查找慢。 二叉树:优点是查找、插入、删除都快(如果树保持平衡)。缺点是删除算法复杂。 红-黑树:优点是查找、插入、删除都快,树总是平衡的。缺点是算法复杂。 2-3-4树:优点是查找、插入、删除都快,树总是平衡的,类似的树对磁盘存储有用。缺点是算法复杂。 哈希表:优点是如果关键字已知,则存取极快,插入快。缺点是删除慢,如果不知道关键字则存取很慢,对存储空间使用不充分。 堆:优点是插入、删除快,对最大数据项的存取很快。缺点是对其他数据项存取慢。 图:对现实世界建模。有些算法慢且复杂。 Java中集合框架的总体设计 良好的设计总是相似的。它使用一个好用的接口来封装一个特定的功能,它有效的使用CPU与内存,等等。 我们常用的数据结构有线性表、栈、队列等线性结构,还有集合以及哈希表,所以我们只讨论这几种结构的设计。 在分析Java集合框架的设计思路之前,我们先来认真思考一个问题,如果让你去设计Java的集合框架,你会怎么做? 小明的做法 如果是小明来设计的话,我猜他会选择一种简单粗暴的方式,分别去写几个类来实现线性表、栈、队列、集合以及哈希表。好,那么问题来了。 假如用户想自定义一个用自己方式实现的线性表,那么他该如何操作? 假如开始用户使用了无序的线性表,然后因为某个需求要改成有序的,那么用户需不需要进行很大改动呢? 假如小明要对已有的Api进行升

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档