" 数据结构与算法"不管是在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的时候,控制台就会抛越界异常,读者需要特别注意。
以上就是数组的全部内容,之所以将数组放在数据结构与算法系列的第一篇,是因为数组是最好理解的数据结构,有一个好的开篇能让读者更有信心进行之后的学习。