原创

数据结构与算法:数组(Array)

作者 | 浩说编程
来源 | 公众号:浩说编程
[  用"内容"服务读者 | 让"代码"服务大众  ]



" 数据结构与算法"不管是在Java还是在任何语言中都是核心基础知识,就像是盖楼的地基一样,它被广泛的应用于架构的最底层,对于这部分知识的掌握程度能够决定读者以后的高度。

出于这个初衷开更本系列文章,希望能对读者有所帮助。


01 | 数组的概念

    数组是用于存储相同数据类型数据的一种线性数据结构,它在内存中是一组连续的内存空间。

图片


02 | 数组的寻址逻辑

    以上面的数组为例,内存空间为数组a分配的连续内存空间为10~27,若想取得a[3]的值,计算机是如何寻址的呢:

    首先,获取内存为数组a分配的首地址head_address=10,

    然后获取目标位置3,

    最后获取每个元素占用的内存空间data_type_address=4(int类型数据每一位占四个字节),

    所以a[3]address = head_address+3*data_type_address

    于是推导出寻址公式

图片

03 | 数组的特性

    高效的随机访问

        由于数组在内存中连续分布,所以随机访问元素非常高效,可以直接通过上面讲的寻址公式计算获得。

    相对低效的“插入”和“删除”

        任何事物都具有两面性,同样由于数组在内存中连续分布,所以在对数组的中间元素进行“插入”或“删除”操作时,为了保证内存空间的连续性,需要移动后面所有元素的位置,想象一下若后面的元素量相当庞大,那么这个过程将非常低效耗时。

图片

    删除同理上移

 

04 | 数组下标越界问题(ArrayIndexOutOfBoundsException)

    数组下标越界问题是读者日常开发中需要特别注意的,对于入门阶段的读者应该尤其关注,看下面这段代码:

图片

    由于数组array的最大下标为array[3],于是当i=4的时候,控制台就会抛越界异常,读者需要特别注意。

    以上就是数组的全部内容,之所以将数组放在数据结构与算法系列的第一篇,是因为数组是最好理解的数据结构,有一个好的开篇能让读者更有信心进行之后的学习。

正文到此结束
本文目录