简要解析一维数组
1.数组含义
存放一组具有相同数据类型的数据的容器。
2.数组的特点
2.1 空间存储上,内存地址是连续的
2.2 每个数组元素所占空间大小相同
2.3 可以知道首元素的内存地址
在对数据定义的时候,就把首元素的内存地址赋值给了定义数组的变量名
例如: int[] a=new int[4];,就是把数组a的首元素内存地址赋值给了变量a
2.4 通过下标可以计算出偏移量(任意两个数组元素内容之间)
编译量的含义:相对数组首元素所在位置的偏移值
偏移量=所求数组元素的下标-首元素的下标=所求数组元素的下标
例如计算a[3]之间的偏移量,偏移量=3-0=3=所求数组元素的下标;
总结:数组的下标就等于偏移量
2.5 通过偏移量和首元素的内存地址可以知道其他任意元素的内存地址,然后去通过内存地址定位(类似css中的id),效率较高.
假设每个数组元素的存储单元的空间为c(该种数据类型在系统里面占几个字节)
其他元素的内存地址=首元素的内存地址+偏移量*c;
例如已知 数组长度为4,首元素的内存地址为d
那么第二个元素的内存地址=d+1*c;
第三个元素的内存地址=d+2*c;
第四个元素的内存地址=d+3*c;
你想哈,每个元素的内存地址都可以通过数组的首元素的内存地址去找到,而找到之后就相当于你是根据唯一的值(类似id)去找对应的值,那肯定会找的很快啊
3 数组为什么查询或者修改值效率高?
如果你回答是因为下标的缘故,那就显得不太专业。
解答: 因为数组定义时的那个变量就存放了数组的首元素的内存地址
而其余元素的内存地址可以通过数组首元素内存地址+偏移量*存储空间得到
查询的时候就相当与拿一个唯一的标识符去找东西,就没有必须要求要一个个往下找,因此它的效率会较高。
而修改操作同理,只不过在查询的基础上,进行了赋值操作
4 数组为什么在非尾元素的部分执行增加或删除操作,效率较低???
前提:数组是在内存中是连续进行存储的
增加操作
如果你在非尾元素部分,增加一个元素,需要先定义一个新数组,因为数组长度一旦经过定义后就不能被修改了。而新数组的时候进行循环赋值的时候,插入位置的前面的数据,依次赋值即可,对插入元素位置赋值你要插入的数据,对新数组插入位置后的元素,直接接收原数组插入元素位置及其之后元素位置的内容.(往后挪动了一格)
删除操作
如果你在非尾元素部分,删除一个元素,需要先定义一个新数组(长度+1=原数组长度),因为原数组长度一旦经过定义后就不能被修改了。而新数组的进行循环赋值的时候,删除位置的前面的数据,依次赋值即可,对新数组删除位置及其之后的元素,直接依次接收原数组删除位置的后一个位置的数值及其之后所有元素的数值