首页 > 编程语言 > 详细

《数据结构与算法之美》03——数组

时间:2020-06-16 18:39:20      阅读:40      评论:0      收藏:0      [点我收藏+]

一、概念

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

关键词:

1. 线性表(Linear List),线性表就是数据排成像一条线一样的结构。

 技术分享图片

相对的是,非线性表

 技术分享图片

 

2. 连续的内存空间和相同类型的数据。

有这两个限制,有一个特性:随机访问。通过内存空间地址来获取数组元素。

 

二、警惕数组的访问越界问题

C语言为例,只要不是访问受限的内存,所有的内存空间都是可以自由访问的。

JavaC#为例,数组越界时会抛出异常。

 

三、容器能否完全替换数组

JavaArrayLisit为例(同比C#List),最大的优势是可以将很多数组操作的细节封装起来,并且支持动态扩容。

注意:动态扩容涉及内存申请和数据搬移,如果事先能确定需要存储的灵气大小,最好在创建时就指定数据大小。

 

相比于容器,数组是否无用武之地?

1. JavaArrayList无法存储基本类型,会涉及到AutoboxingUnboxing,对性能有一定的消耗,如果关注性能,选择数组。

2. 如果数据大小已知,并且对数据的操作非常简单,可直接使用数组。

3. 表示多维数组时,用数组往往会更加直观。

 

但对于业务开发,直接使用容器就足够了,省时省力。

 

课后思考:

1. 前面我基于数组的原理引出JVM的标记清除垃圾回收算法的核心理念。我不知道你是否使

Java语言,理解JVM,如果你熟悉,可以在评论区回顾下你理解的标记清除垃圾回收算法。

使用的是C#,一样有GC

有两个阶段:

阶段1Mark-Sweep标记清除阶段

阶段2Compact压缩阶段

 技术分享图片

参考资料:https://kb.cnblogs.com/page/106720/

 

2. 前面我们讲到一维数组的内存寻址公式,那你可以思考一下,类比一下,二维数组的内存寻址公式是怎样的呢?

a[i][j]_address = base_address + (i * col_count + j) * data_type_size

 

《数据结构与算法之美》03——数组

原文:https://www.cnblogs.com/liang24/p/13143426.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!