数组
数组的特性
- 线性表结构;
- 需要内存中有足够的连续储存空间,否则剩余空间再大也会创建失败;
- 可通过下标随机访问,时间复杂度为O(1)常量阶;
- 如果不通过下标访问,而是通过算法查找(比如二分法),则时间复杂度为O(logn)对数阶。
- 插入删除操作低效,在插入/删除操作时,最坏时间复杂度为O(n)。
ArrayList能否完全替代数组
ArrayList只支持包装类型,如Intenger,Long等,却不支持结构体,在存入结构体时会自动装箱,而装箱操作会有一定的性能消耗。
在做一些底层开发时,建议使用数组。
为何下标从0开始
下标可以理解为「偏移量」,从0开始就意味着不需要偏移,才是正确的理解。当我们通过下标查找元素时,cpu会通过计算偏移量来查找,而如果以1开始,cpu计算完偏移量之后还要追加一次减1操作。