# 简介
# 什么是数组?
数组是存储在连续内存位置的项目的集合。这个想法是将多个相同类型的物品存储在一起。这使得通过简单地向基值(即数组的第一个元素的内存位置(通常由数组的名称表示)添加偏移量)来计算每个元素的位置变得更容易。
# 数组的优点
- 访问元素很快
- 缓存局部性,提升性能
- 用单个名称表示相同类型的多个数据项
- 存储多个相同名称相似类型的数据
- 可以用于实现其他数据结构
# 数组的缺点
- 静态数组必须固定大小
- 数组小数据多时会丢失
- 单个数组不能存储不同类型的数据
- 插入删除难以实现
# 数组相关问题
- 如果不初始化数组会怎样? 使用数组时,数组内的数据会undefined。
- 为什么从数组中获取值的复杂度是O(1)?
因为数组在内存中都是连续分配的,只需知道索引即为首址的偏移量,相加即可获取值。算术运算的复杂度就是O(1)。 - 什么时候应该使用数组而不是列表(仅java)?
多维、静态分配、快速处理数据、类型为原始数据类型等情况时,不应该用ArrayList。 - 什么是循环排序数组? 本身升序或者降序排序的数组,向左或向右移动几位,就是循环排序数组。
- 如何用哈希图比较两个数组?
将每个值出现的次数通过keyvalue的形式存在map中,第二个数组比较时减去次数,如果出现0次或者不存在的就返回false即可。 - 链表相对于数组有什么优点?我们在什么场景下使用LinkedList,什么时候使用Array?
插入删除更快,大小更加灵活,动态分配内存。需要频繁插入删除时,使用链表。 - 稀疏数组是什么意思?
稀疏数组是大多数元素为0的数组,元素的索引不具有从0开始的特点,用二维数组记录非0值出现的行列和值。
[[ 0, 0, 7, 0 ],
[ 1, 0, 0, 0 ],
[ 2, 0, 5, 0 ],
[ 0, 8, 0, 4 ] ]
// 用二维数组表示时输出行列为:
0 1 2 2 3 3
2 0 0 2 1 3
7 1 2 5 8 4
- 堆相对于排序数组有什么好处? 堆的创建时间复杂度更低,插入和删除更高效。