为什么数组的下标从 0 开始?
微信搜索 【微观技术】,关注这个不喜欢内卷的程序员。
精彩文章汇总 GitHub https://github.com/aalansehaiyang/technology-talk ,Star 12K ,汇总java生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识
大家好,我是Tom哥~
数组,作为技术同学一定不会陌生。天天和它打交道,闭着眼都认识它。
首先,我们来复习下数组的定义
数组是一组连续内存空间存储的具有相同类型的数据,整个排列像一条线一样,是一种线性表数据结构。
那么,问题来了,数组的下标为什么要从 0 开始?从 1 开始行不行?
端好你的小茶杯,开始进入正题
数组之所以广泛使用,是因为它支持随机访问。
整理了一份大厂常考面试题,这份pdf包括 Java基础、Java并发、JVM、MySQL、Redis、Spring、MyBatis、Kafka、设计模式等面试题,分享给大家。
下载地址:百度云链接:https://pan.baidu.com/s/1XHT4ppXTp430MEMW2D0-Bg 提取码: s3ab
什么叫随机访问?
数据在内存中都是按顺序存放的,通过下标直接触达到某一个元素存放的位置。
公式:
Tom哥[n] = base_address + n * data_size
base_address,表示数组的首地址
n,表示偏移量
data_size,表示数组类型的字节数
① 读取上面数组的 【0】位置的 `微`
② 读取上面数组的 【9999】位置的 `注`由于基于计算的内存地址读取数据,上面两种情况的耗费的时间是一样,时间复杂度为 O(1)
注意:想要使用随机访问,一定要满足两个条件: 1、连续的内存空间 2、相同类型的数据
知识补充:
与随机访问
对应的是顺序访问
顺序访问:链表在内存中不是按顺序存放的,而是通过指针连在一起,访问某一元素,必须从链头开始顺着指针才能找到某一个元素。
突然,一个奇怪的念头冒了出来,假如我们将数组的首个下标从 1 开始 ,会怎么样?
我们读取 下标为n
的数据
公式:
Tom哥[n] = base_address + (n-1) * data_size
与上面的公式的区别,多了一次 n-1
操作
虽然也能读取数组中的值,但是多了一次减法的指令运算。
数组是一个最基础
、最简单
的数据结构。要知道我们的上层API内部很多都会依赖于数组
,而互联网应用又讲究一个高并发,一言不合就是千万级QPS,如此高频的访问量,这个冗余的减运算
就会放大无数倍,产生巨大的性能损耗。
这样说,可能大家感受不一定明显!!!
”我在马路边捡到一分钱,把它交到警察叔叔手里边“。现在再有一分钱,你还会捡吗,估计很多人都看不上眼,但要是全国人民每人给你一分钱呢
14亿 * 1分钱 = 1400万 人民币
是不是可以立马辞职,回家躺平了!
量变引发质变,做软件开发,我们一定要考虑将性能优化到极致,骨子里透着工匠精神。
关于我:Tom哥,前阿里P7技术专家,出过专利,多年大厂实战经验。欢迎关注,我会持续输出更多经典原创文章,为你大厂助力。
欢迎小伙伴找Tom哥唠嗑聊天, 技术交流,围观朋友圈,人生打怪不再寂寞。
为什么数组的下标从 0 开始?相关推荐
- java数组下标0_Java语言中数组元素下标从0开始。
[单选题]规范规定,硅酸盐水泥的初凝时间不小于( ). [判断题]打开/关闭"对象追踪"的功能键是F11. [判断题]break语句的作用是结束当前的循环体. [单选题]项目标识代 ...
- 790-C语言的数组元素下标为何从0开始?
C语言的数组元素下标为何从0开始? 我们在学习数组时会有这个疑问,数组元素的下标为什么不从1开始呢? 从1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个. 的确,有些计算机语言如 ...
- C语言数组元素下标为何从0开始
很多同学可能在学习数组时会有这个疑问,下标为什么不从1开始呢?从1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个.的确,有些计算机语言如早期的Pascal语言,数组元素的下标是从 ...
- c语言中的下标,c语言中数组的下标从什么入手下手?_后端开发
c言语中数组的下标从0入手下手.由于假如数组元素下标从1入手下手,每次盘算地点时,须要多做一次减法操纵.所以,为了进步效力,C言语数组元素下标从0入手下手. c言语中数组的下标从0入手下手. 数组中的 ...
- c语言中的下标变量是什么,c语言中数组的下标从什么开始?
c语言中数组的下标从0开始. 数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示. 例如:a[0]就表示名字为a的 ...
- php数组下标从1开始,数组的下标从什么开始
数组的下标从0开始.数组是有序的元素序列.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数字编号称为下标. 本文操作环境:windows10系统.Th ...
- C语言试题四十四之移动一维数组中的内容,若数组中由n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。
1. 题目 请编写一个函数function,它的功能是:移动一维数组中的内容,若数组中由n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后. 2 .温馨提示 C语言试题汇总里可 ...
- C语言:对包含10个整数的数组进行如下的操作,从下标为0的元素开始到最后一个元素,依次向前移动一个位置。
/*对包含10个整数的数组进行如下的操作,从下标为0的元素开始到最后一个元素,依次向前移动一个位置.*/ #include <stdio.h> void main(void) {int a ...
- 数组的下标为什么从0开始而不是从1开始
数组是一段连续的空间,要求a[i]就是求它的地址,然后找到它. 如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度: 如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数 ...
最新文章
- android wsdl封装,《android 解析WebService》
- 爱心的数学函数方程_高中数学中的函数与方程思想
- 【项目合作】移动端人体姿态估计
- 诗与远方:无题(八十)- 吸烟而作
- println 停止线程_停止调试使用Println并改用Delve
- 53 -leetcode 7. 整数反转
- mybatis plus 入门
- 拓端tecdat|R语言用普通最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类
- 分析华为鸿蒙操作系统的特点,申万宏源-通信行业系列深度研究和分析报告之华为鸿蒙操作系统全景解构.pdf...
- FANUC机器人示教器介绍
- 服务器装win7没有硬盘模式,联想电脑BIOS里硬盘的SATA,AHCI模式里面怎么没有I...-联想p310工作站装win7,联想电脑工作站...
- linux系统 插上硬盘认不到,关于Linux系统增加SCSI硬盘不识别的问题及解决办法
- 傅里叶级数 三角形式 到 复数形式
- sql server 创建动态交叉表
- 七、python排序之先按汉语拼音排序再按笔画排序
- 2022 QS世界大学排名发布!MIT霸榜,清北冲上全球前20
- 2018软工实践作业一
- 不良贷款催收之技巧和策略
- AT_abc210_d [ABC210D] National Railway 的题解
- FPGA开发基础之三段式状态机