三段斗之气–Java 集合框架概述
修炼完这一篇秘籍,你就可以成为三段斗之气战士了,天赋出色者甚至可以越阶战斗,成为百里挑一的斗者,踏上漫漫强者路,拳打北山幼儿园,脚踢南海敬老院。
该系列文章下一篇: 四段斗之气–Collection接口.
数组在集合面前就是个弟弟
你要修炼这篇秘籍,首先要知道集合是个啥玩意儿,为什么Java武功体系里面要有这么一个派系,它有啥作用。实际上,面向对象语言对事物的体现都是以对象的形式存在,这些对象平常是需要存储起来方便以后操作的,集合就是一种存储对象的容器。就像我们修炼者平常修炼出的斗气需要存储起来一样。
曾经有一个斗之气一段的兄弟问我,用数组不就完事了,费那事干啥玩意儿,我语重心长地对他说,自然是因为集合这个容器能够解决许多数组解决不了的问题所以那些远古强者方才开创了这一新的修炼体系。
- 你平常在使用数组时,有没有发现总是需要指定一个初始容量,在使用过程中稍微一不注意就会告诉你它越界了,报异常了,斗气不够了,然后别人一个八极崩把你轰死了。
- 另外,有时候你需要知道你用的这个数组里面到底存了多少个数据了,你发现竟然没有一个直接的属性方法能够知道数量,数组只能告诉你它总长度是多少,就是你前面自己给定的初始量。
- 另外数组里面存储的东西都是有序的、可重复的,并且元素类型一致。元素类型一致好理解,有序性是说你往数组里面增加数据的时候都是按着索引Index的大小从前往后存的,可重复就是说一个数组里面可以存储两个相同的元素。
- 还有一点,你平常为了在一个数组中间某个位置插入某一个元素,你会怎么做,只能新建一个数组,把要插入的元素放到新数组的指定位置,然后在把元素组复制过去,这也太麻烦了。而集合就就有办法解决上述问题,可以发现新技术的出现,总是因为旧技术因为各种各样的缺点满足不了人们某些需求,所以我们有必要将数组的缺点总结一下,方便我们对照着修炼集合。
- 一旦初始化以后,其长度就不可修改。
- 数组中提供的方法非常限,对于添加、删除、插入数据等操作,非常不便,同时效率不高。
- 获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用。
- 数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足。
快使用双截棍,哼哈哼嘿
前面是说集合是存储数据的容器,以及相对于数组容器的优点,现在我们一起看下修炼集合到底要修炼哪些东西。
Java集合可以分为Collection和Map两大体系。这就是两个接口,什么是接口?其实就是一种行为规范,你要想使用某个类,就需要遵守这个接口给你规定的行为规范,也就是我们常说的实现这个接口。
- Collection一般用来存储单列对象。包括List,Set两个接口,这两个接口有许多实现类,比如在开发中经常会用到的,在面试中或者在跟别的武者切磋时,经常要使用的有ArrayList,LinkedList,HashSet,LinkedHashSet,TreeSet等实现类;
- Map是用来存储双列数据,保存具有映射关系“Key-value”的集合。经常使用的有HashMap、LinkedHashMap,Properties,TreeMap等实现类。
不要感到头晕,集合的每一个接口和每一个实现类都有它存在的道理和意义,搞清楚它们各自存在的意义,在存储数据方面有哪些自己的独特性能,就可以很好地对他们进行区分,实际上,搞清楚ArrayList和HashMap,你就具备了九段斗之气地实力了,只要在花点时间对其他的集合实现类也雨露均沾一下,就可以一举突破成为斗者!!!
谨记:修炼集合框架秘籍,重点在于先理解每一个具体实现类的生命意义,搞清楚它和别人的不同之处,在理解它的基础上,学会使用它的常用方法,在进一步深入到它的灵魂和肉体之中,堪破源码,万法归宗~
去看该系列文章下一篇: 四段斗之气–Collection接口.
参考文献
[1]Bruce Eckel.Java编程思想(第4版)[M].机械工业出版社,2008:459-524.
更多
对我的文章感兴趣,点个关注不迷路,持续更新中…
关注微信公众号LearnJava: