概念
数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。
关键词:
1.线性表(Linear List),线性表就是数据排成像一条线一样的结构。

相对的是,非线性表。

2.连续的内存空间和相同类型的数据。
有这两个限制,有一个特性:“随机访问”。通过内存空间地址来获取数组元素。
警惕数组的访问越界问题
以C语言为例,只要不是访问受限的内存,所有的内存空间都是可以自由访问的。
以Java、C#为例,数组越界时会抛出异常。
容器能否完全替换数组
以Java的ArrayLisit为例(同比C#的List),最大的优势是可以将很多数组操作的细节封装起来,并且支持动态扩容。
注意:动态扩容涉及内存申请和数据搬移,如果事先能确定需要存储的数据大小,最好在创建时就指定数据大小。
相比于容器,数组是否无用武之地?
- Java的ArrayList无法存储基本类型,会涉及到Autoboxing、Unboxing,对性能有一定的消耗,如果关注性能,选择数组。
- 如果数据大小已知,并且对数据的操作非常简单,可直接使用数组。
- 表示多维数组时,用数组往往会更加直观。
但对于业务开发,直接使用容器就足够了,省时省力。
课后思考
1.前面我基于数组的原理引出JVM的标记清除垃圾回收算法的核心理念。我不知道你是否使用Java语言,理解JVM,如果你熟悉,可以在评论区回顾下你理解的标记清除垃圾回收算法。
使用的是C#,一样有GC。
有两个阶段:
- 阶段1:Mark-Sweep标记清除阶段
- 阶段2:Compact压缩阶段

参考资料:https://kb.cnblogs.com/page/106720/
2.前面我们讲到一维数组的内存寻址公式,那你可以思考一下,类比一下,二维数组的内存寻址公式是怎样的呢?
网友评论