请选择 进入手机版 | 继续访问电脑版
尚学堂集团旗下品牌:尚学堂速学堂百战程序员云数学院[切换校区]
本帖最后由 qwerlkjh0258 于 2018-10-27 10:59 编辑

集合家族历史悠久,远近闻名。自创立以来,始终将储备人才、振兴Java作为家族使命。由于其包容性,多年以来数以万计的优秀数据纷纷加入,更是为其在业界赢得了一致好评。
经过这些年的积累,逐渐形成了自己的管理机制。其实细观这个庞大家族就不难发现,集合下属们将成员分为两类,单身数据和键值数据。于是很明显地产生了两大阵营:Collection和Map。所谓术业有专攻,他们两者虽然因为对未来发展道路的不同见解,而选择了不同的道路,然一路走来,仍是相互扶持、密不可分,才使家族有了今日的辉煌。
Collection作为家族中的中坚力量,发挥着重要的作用。其下属的两位主力List和Set,多年以来各司其职,将南来北往的数据对象们管理的井井有条。
List直属最受欢迎、也最具代表性的是成员ArrayList,他将从数组那里继承来的内部数据结构,应用到集合家族对数据对象的管理实践中,通过底层数组扩容,打破了数组管理只能接待有限人数的机制,使更多的数据对象得以收容,并释放应有的价值。同锋芒毕露的ArrayList不同,双胞胎哥哥Vector行事更加稳重,为了保证工作过程的安全,采用同步线程。但是因为工作效率极低,在激烈的竞争中逐渐败下阵来,被弟弟取代。
虽然ArrayList优势明显,但是他的工作机制中存在一个缺陷:寡断。在人员去留的问题上总是要处理很久,家族中每次有新成员加入,或者老成员离去,他必须将全体的成员召集起来,为每个人重新做规划。于是,基于集合家族的全面发展的需要,LinkedList应运而生了。他采用了链表的数据结构,有着完全区别于ArrayList的自己特定的方法,完美地解决了人员调动的问题。
List有序管理人员进出不同,Set的管理是无序的,却因此更具有个人魅力。拿大家比较熟悉的HashSet来说吧,他天生就是为家族挑选最合适的人才而存在的。虽然ArrayList在这方面也极具天赋,但如果没有对象的序号信息,恐怕要从头到尾找个遍才能找到。由于HashSet一开始就是根据对象的HashCode来为大家做登记的,所以在查找的时候只要计算一下就轻而易举地找到了。
其实,HashSet的底层是基于HashMap的。我们都知道,所有Map下属的特点就是键值对,每个成员都是拖家带口前来投奔的。HashSet没有这种机制,毕竟他追随的是Set大人。所以,为了符合HashMap的语法,HashSet存储的对象对应了键值对中的Key,而Value则是固定的一个值——所有对象对应的Value都是Object对象Present。这样一来,HashSet在阵营中就勉强站的住脚了。
或许外表已经是千差万别,但是细细想来,集合家族之间存在着的千丝万缕的联系,正是推动Java世界稳步发展的重要因素。透过他们的表面去探究本质的东西,我们也会收获更多。
分享到 :
人收藏 回复 使用道具
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部