重走Java路-Java常用数据结构-数组

    上回我们说到了Java的引用数据类型String,回顾了String是一个char[]数组的本质,以及jvm编译加载过程中对确定的字符串能提前初始化的问题。还以面试题的方式展开了对Stirng中intern()方法的讲解,以通过阅读源码的方式说明了,intern()方法返回字符串对象的引用,系统初始化的时候字符串常量池为空,当我们调用intern方法时,会先检查字符串常量池中是否有该字符串的引用存在,如果存在则直接返回常量池中的该引用。如果不存在则先去new该字符串对象,完了之后再将该字符串的引用存放于字符串常量池中并返回该引用。

    好了回顾完了上次String的知识点之后,我们今天开始回顾Java的另一种引用数据类型--数组。

    再开始讲解之前我还是坚持我的习惯,先提问?

    1、数组是什么?

    2、用数组能做什么?

    3、为什么要用数组?

    4、有没有基本数据类型的数组?

    5、数组当中存储的到底是啥?

    6、通过数组查询为什么快?

    我能想到的问题差不多就这么多了,如果各位小伙伴有更好的问题欢迎补充。

  •     首先我们来看第一个问题:数组是什么?

    形象一点说吧,如果基本数据类型好比一个杯子(容器),byte、short、int等等分别代表不同大小的杯子,可用于盛装不同体积的奶茶(二进制字节)。那么数组就好比一个杯架,能用于盛装一定数量一定规格的杯子。

    比较专业一点的说法就是:数组是多个相同数据类型按照一定的顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

  •     接下来我们来看第二问题:用数组能做什么?

    首先我们联系业务场景,如果现在我们需要记录一个学生的成绩,我们很容易想到定义一个int类型的变量来记录。例如:int a=100,如果有两个学生呢,我们可以再定义一个变量 int b=99,那如果有n个学生呢?我们不可能去定义n个变量,这个时候我们肯定会想到要是有这么一个容器能装n个同学的成绩就好了。既然你想到了那么我们Java之父(詹姆斯-高林斯)肯定也早都考虑到了这个问题,不就是要存n个元素嘛,我们定义一个数组不就行,给他指定一个类型同时指定一下大小,这样不就能满足我们存储n个元素的需求。然后詹姆斯-高林斯大神又给这样的容器起了一个好听的名字--“数组”,哈哈当然这是我自己胡编乱造的一个故事,数组作为最常用的数据类型,早都存在于老古董C语言当中了。

  •     接下来我们来看第三问题:为什么用数据?

    通过上面两个问题,我们知道了数组可以存储n个相同类型的元素,这样就避免了创建n次相同类型的数据,当然在这里你可能会问。即使你能存储n个元素,但是你也不能避免要先去创建n个相同类型的数据,完了之后你才能,把这些数据添加到数组中。对,你说的没毛病,你能想到这些也说明你的基础不错。但是此时此刻我的需求又变了,我需要对这些数据进行排序然后依次输出呢,这时候你是不是想到了还是数值香啊,遍历排序一下就行了。

  •     接下来我们来看第四问题:有没有基本数据类型的数组?

    这里我可以很负责任的告诉你,没有基本数据类型的数组,数组都是引用数据类型。我们在工作中通常说定义一个“基本数据类型的数组”其实是错误的说法,这个时候我们定义的只是一个能存储基本数据类型的数组,但是数组本身还是引用数据类型。

  • 接下来我们来看第五问题:数组单重到底存储的是啥?

    1、其实呢,之所以问这个问题,只是为了让大家记住“引用数据类型数组”(存储引用数据类型的数组)当中存储的是数据的引用而不是具体的对象,也就是之前我们所说的引用数据类型的遥控器。

    2、但是对于基本数据类型的数组,数组当中存储的就是数据对象本身

  • 接下来我们来看第六问题:通过数组进行查询为什么这么快?

    这个问题稍微涉及到了,一点点的计算机组成原理的相关知识,计算机当中运行最快的是CPU,比他慢百倍的是内存,比内存慢万倍的是磁盘。对于数组数据结构它在内存当中是一片连续的空间,而我们通常所说的程序慢通常是磁盘的I/O读写耗时较多造成了程序慢。所以对于从数组中查询元素的操作,对于CPU而已都是一样的代价,只需要一个存指取指的过程。所以该操作的时间复杂度是O(1),这样就能解释为什么通过数组进行查询快了。

  • 回答了上面的六个问题,我们再来一起回顾一下Java中定义数组的几种常用方式
int[] array1 = new int[3];
int[] array2 = {1,2,3};
int[] array3 = new int[]{1,2,3};

Integer[] array4 = new Integer[3];
Integer[] array5 = {1,2,3};
Integer[] array6 = new Integer[]{1,2,3};

    好了,今天的Java数组相关知识就回顾到这里了,因为各种原因文章停更了一段时间,安装正常授课的流程后面应该回顾"面向对象"了,但是我个人感觉脱离了设计模式的面向对象是没有灵魂。因为前面一直的讲的关于数据类型相关的知识,为了知识的耦合性相对连贯,接下来我打算回顾一下数据结构相关的知识。

    故事未完请听下回分解-“重走Java路-数据结构与算法-数组-手写ArrayList”。

 

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值