一、什么是数组

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

1.线性表(Linear List)

线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。、
【极客笔记】数组:为什么很多编程语言中数组都从0开始编号?

2. 随机访问

连续的内存空间和相同类型的数据来保证了这个特性

a[i]_address = base_address + i * data_type_size

【极客笔记】数组:为什么很多编程语言中数组都从0开始编号?

3. 插入删除

【极客笔记】数组:为什么很多编程语言中数组都从0开始编号?
优化的删除是先标记,等数组满了后再一次性删除,减少操作次数
【极客笔记】数组:为什么很多编程语言中数组都从0开始编号?

4. 容器

① Java ArrayList 无法存储基本类型,比如 int、long,需要封装为 Integer、Long 类,而 Autoboxing、Unboxing 则有一定的性能消耗,所以如果特别关注性能,或者希望使用基本类型,就可以选用数组。

② 如果数据大小事先已知,并且对数据的操作非常简单,用不到 ArrayList 提供的大部分方法,也可以直接使用数组。

③ 表示多维数组时,用数组往往会更加直观。比如 Object[][] array;而用容器的话则需要这样定义:ArrayList array。

5. 数组下标为什么 0 开始

//以0为起始位置
a[k]_address = base_address + k * type_size
//以1为起始位置
a[k]_address = base_address + (k-1)*type_size

可以看出,后者寻址公式每次都会多一步,效率降低

相关文章: