本文转载自微信公众号“微科技”,作者汤哥。转载本文请联系微科公众号。首先,让我们回顾一下数组的定义。数组是存储在连续内存空间中的一组相同类型的数据。整个排列就像一条线,是一个线性表数据结构。那么,问题来了,为什么数组的下标从0开始呢?从1开始可以吗?拿着你的小茶杯,开始进入正题。数组之所以被广泛使用,是因为它支持随机访问。什么是随机访问?数据在内存中是顺序存储的,通过下标直接访问一个元素存储的位置。公式:汤姆哥[n]=base_address+n*data_sizebase_address,表示数组首地址n,表示偏移量data_size,表示数组类型的字节数①在[0]位置读取`micro`abovearray②`Note`读取上面数组的[9999]位置是根据计算出的内存地址,上面两种情况所花的时间是一样的,时间复杂度都是O(1)注意:如果你想使用随机访问,必须满足两个条件:1.连续的内存空间2.同类数据的知识补充:顺序访问对应于随机访问顺序访问:链表在内存中不是顺序存储的,而是通过pointers,要访问一个元素,你必须从链头开始跟随指针找到一个元素。突然,一个奇怪的想法冒了出来,如果我们把数组的第一个下标从1开始呢?我们读下标为n的数据公式:Tom哥[n]=base_address+(n-1)*data_size和上面公式的区别在于多了一个n-1操作,虽然数组中的值也可以被读取,但有一个额外的减法指令操作。数组是最基本、最简单的数据结构之一。要知道我们上层的API很多都是依赖数组的,互联网应用讲究高并发。如果有分歧,那就是几千万QPS。如此高频次的访问,这种多余的减法运算会被放大无数倍。发生巨大的性能损失。这样一来,大家可能就看不出来了!!!“我在路边捡到一分钱,交给了警察叔叔。”现在又多了一分钱,你还会捡吗?我想很多人会看不起,但是如果全国人人都给你一分钱,14亿*1分钱=1400万元,你能马上辞职回办公室吗?家是平的!量变导致质变。做软件开发,要把性能考虑到极致,工匠精神是骨子里的。
