作者 | 浩说编程 来源 | 公众号:浩说编程 [ 大厂技术资源 | 研发必备安装包 | 限时免费获取 ] " 数据结构与算法"不管是在Java还是在任何语言中都是核心基础知识,就像是盖楼的地基一样,它被广泛的应用于架构的最底层,对于这部分知识的掌握程度能够决定读者以后的高度。 出于这个初衷开更本系列文章,希望能对读者有所帮助。 读者的收获 1、了解数组的概念 2、数组的内存结构 3、数组的寻址逻辑 4、数组的特性 5、日常使用中需要注意的问题 码文不易 你的关注是浩说编程持续更新的动力 一、数组的概念 数组是用于存储相同数据类型数据的一种线性数据结构,它在内存中是一组连续的内存空间。 二、数组的寻址逻辑 以上面的数组为例,内存空间为数组a分配的连续内存空间为10~27,若想取得a[3]的值,计算机是如何寻址的呢: 首先,获取内存为数组a分配的首地址head_address=10,然后获取目标位置3,最后获取每个元素占用的内存空间data_type_address=4(int类型数据每一位占四个字节),所以a[3]address = head_address+3*data_type_address 于是推导出寻址公式: 三、数组的特性 一、高效的随机访问 由于数组在内存中连续分布,所以随机访问元素非常高效,可以直接通过上面讲的寻址公式计算获得。 二、相对低效的"插入"和"删除" 任何事物都具有两面性,同样由于数组在内存中连续分布,所以在对数组的中间元素进行"插入"或"删除"操作时,为了保证内存空间的连续性,需要移动后面所有元素的位置,想象一下若后面的元素量相当庞大,那么这个过程将非常低效耗时。 删除同理上移 四、数组下标越界问题(ArrayIndexOutOfBoundsException) 数组下标越界问题是读者日常开发中需要特别注意的,对于入门阶段的读者应该尤其关注,看下面这段代码: 由于数组array的最大下标为array[3],于是当i=4的时候,控制台就会抛越界异常,读者需要特别注意。 以上就是数组的全部内容,之所以将数组放在数据结构与算法系列的第一篇,是因为数组是最好理解的数据结构,有一个好的开篇能让读者更有信心进行之后的学习。 作者 | 浩说编程 来源 | 公众号:浩说编程