前言
在Java的学习过程中有一个不得不攻克的难关,叫做集合,也有的叫法将其称为容器。它是JDK帮助我们实现的一系列数据结构,无论是何种样的开发都离不开集合。例如JavaEE开发中会与数据库进行一系列交互拿到我们需要的持久层数据,而这些数据往往不是一条,所以这个时候,集合的作用就体现出来了。我们可以将这些数据一次性存储在集合中,然后返回给前端,在页面上进行展示。而且对JDK中集合源码进行分析,也对我们学习数据结构有很大的帮助,我们可以去欣赏真正的大牛是如何将这些理论上数据存储方式落地实现,对提升我们的编程素养有极大的好处。
一、集合概述
对于许多刚开始学习Java的人来说,比如我,总是会不自觉的将Java中的概念抽象化,觉得这都是一些很专业、很难理解的事物,但事实上并不是这样,比如Java中的集合。当我们把Java中的集合与生活中的实际案例进行对比,我们就能很轻易地理解,集合是什么?为什么Java中会有集合也可以说设计集合的意义是什么?下面会根据现实生活中的一些实际例子,来集中对这两个问题进行解释.
一天你和你的朋友商量,我们去爬山吧,你一听,这个主意确实不错,因为既可以领略大自然的美妙风光,也可以锻炼身体,你很愉快的答应了。然后你和你的同伴就要去准备爬山所需要的物资,比如饮用水、食物。当然如果出一趟远门的话还需要准备换洗衣物。只要一个人有普通的生活常识,那么我们一定会将这些爬山所需要的物资找一个合适的登山包收拾在一起,然后统一带上山顶。这其实就是Java中集合的概念。我们将许多东西装在包里,然后再背上包上山,包就是集合,而包里面的内容就是我们Java中的对象(这样说其实不是很严谨,后面会进一步解释)。而Java中集合存在的意义也就一目了然了。没有一个人会愚蠢到把东西一件一件的拿上山的。
二、集合的特点
第二点我们要明确的是,集合在存储Java对象的时候有什么特点:
- 集合中存储的元素不能是基本数据类型
- 集合中不能直接存储Java对象
我们对上面两点逐一进行解释。可能有许多朋友之前也简单的使用过集合,会对第一点产生极大的疑问,为什么集合不能存储基本数据类型,比如下面的代码在main函数中执行是没有任何问题的
ArrayList list = new ArrayList();
list.add(1);
那是我们忘记了Java中和有一种经常使用的类叫包装类。简单来说就是将Java中的基本数据类型也封装为一个类。上面new出来的集合对象在将1添加到集合当中之前,会将基本数据类型的1转换为包装类中Integer类型的1,也可以简单理解为先执行下面的代码
Integer num = new Integer(1);
其余的基本数据类型也可以这样理解,但是是使用它们对应的包装类。在JDK5中,Java实现了自动装箱和自动拆箱这个功能,也就是说,虚拟机会在需要的时候自动将基本数据类型转换为包装类,也会在需要的时候,自动将包装类转换成基本数据类型。这个时候,第二个问题就自然而然的出现了,集合不是不能存储Java对象吗?这又是怎么一回事?注意!!!在集合的特点里面写到的是:不能直接存储Java对象。直接两个字才是集合存储Java对象的精髓。那么我们就需要来进一步解释,集合是如何对Java对象进行存储的,直接上图
红色的字代表着Java对象的引用,而绿色的方块代表Java对象,也就是说,集合对象的每一个元素都是一个Java对象的引用,而这些引用会指向Java对象在内存中的存储位置。这样着两个问题就都解释清楚了。
三、集合的分类
Java中的集合种类繁多,要全部掌握是一件极为耗费时间和精力的一件事情,所以在学习集合的时候一定要有所取舍,重点掌握我们在实际开发过程中需要经常使用的集合。而要掌握集合,我们首先应该了解的就是集合的继承结构关系图,如图所示:
注:这里的继承图只是为了表明集合大致的继承的关系,以便数理集合的脉络,准确的继承关系还是需要参考JDK的官方文档。
总结
这里对集合的概念以及出现的原因做出了分析,与生活中的实际例子结合进行了类比分析,也对常用集合类的继承结构做了展示,希望可以帮助到大家。当然,本人水平有限,如有错误,也希望各位不吝赐教