数组理论基础
数组是存放在连续内存空间上的相同类型数据的集合。
可以通过下标索引来访问数组对于下标中的元素
如图,假设内存地址从101开始的一维数组:

我们可以看到:
- 数组下标是从0开始的
- 数组内存地址是连续的
正是因为数组的内存地址是连续的,所以我们在增加和删除元素时,难免要移动其他元素的地址。
那么二维数组呢?
在java中是没有指针的,寻址操作由虚拟机来执行
增加和删除元素
上面说到,增加或删除元素时,可能要移动其他元素位置。
增加元素
我们要往数组某个下标插入一个元素,就需要把这个下标及其后面的元素移动位置。
比如我们要插入三这个位置,以上面给出的数组为例:

这里内存空间已经满了,我们假设其后面还有一个内存地址:

过程如下:
1.

2.

3.

4.

5.

6.

这样我们要插入的那个位置就空出来了(并不是那个位置是空的,那个位置的元素与覆盖前的元素相同,这个位置已经移位,我们随时可以将它覆盖,不会丢失数据,所以我们可以认为这个位置是空的),现在我们可以将元素插进去,假设是3。

这样就算插入完成了。
最后,让我们将元素的长度加一。
值得注意的是:
为什么是从最后一个开始移动呢?
这是因为如果从前往后移,这样后面的数会被前面的数据覆盖,数据会丢失。造成如下结果:

删除元素
数组的元素是不能删的,只能覆盖
跟上面同理,不过步骤与上述相反,我们要从删除位置后的元素开始往前移动,直到最后一个元素

1.

2.

3.

4.

5.

最后,将数组定义的长度减一。
因为那个位置可以直接覆盖,所以我们就假设那个位置为空了。
需要注意的是,最后一位(也就是数组下标为8的位置)的元素不变,后续要用到这个位置时,我们直接覆盖好了。
7449

被折叠的 条评论
为什么被折叠?



