一、解答
计算机随机访问数组元素的寻址公式:
a[i]_address=base_address+i*data_type_size
其中 a[i]_address代表数组下标为i的元素的地址,base_address代表数组的首地址,i代表数组下标,data_type_address代表数组元素的类型大小。
我们可以做出如下假设:
①数组元素从1开始:那么我们寻址公式与之对应就是a[i]_address=base_address+(i-1)data_type_size
②数组元素从0开始:那么我们寻址公式与之对应就是a[i]_address=base_address+idata_type_size
两者一对比,我们就可以知道原因了,①比②多了一次减法运算。还有一个原因就是历史原因。
二、数组
①数组是一种线性表数据结构。它是用一组连续的内存空间,来存储一组具有相同类型的数据。
②低效的“插入”和“删除”。(其需要大量的搬运数据)
③警惕数组的访问越界问题
三、链表和数组的区别
链表适合插入、删除操作,时间复杂度为O(1);数组支持随机访问,时间复杂度为O(1)。
四、容器
以ArrayList为例,其将数组操作的很多细节封装了起来,且支持动态扩容,但由于扩容的操作涉及一些内存的申请和数组的搬移,比较耗时间,所以最好在创建ArrayList的时候指定数据大小。
五、ArrayList与数组的适用时机
存储基本数据用数组,多维数组时用数据比较直观。
业务开发:适用容器,省时省力。
底层开发:使用数组。
六、线性表与非线性表