一、什么是数组
数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。
1.线性表(Linear List)
线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。、
2. 随机访问
连续的内存空间和相同类型的数据来保证了这个特性
a[i]_address = base_address + i * data_type_size
3. 插入删除
优化的删除是先标记,等数组满了后再一次性删除,减少操作次数
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
可以看出,后者寻址公式每次都会多一步,效率降低