数组

作者: 花椒人生 | 来源:发表于2020-05-17 16:52 被阅读0次

什么是数组

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

数组的几个特点
1、它是线性表。
线性表就是数据排成一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。(链表,队列,栈等也是线性表结构)
2、连续的内存空间和相同类型的数据
因为他的这两个限制,所以他有了随机访问的特性。但是,想要在数组中删除,插入一个数据,就必须得做大量的数据搬移工作来确保数组的连续性。

数组与链表(面试题)

1、数组中的元素存在一个连续的内存空间中,而链表中的元素可以不存在于连续的内存空间。
2、数组支持随机访问,根据下标随机访问的时间复杂度是O(1);链表适合插入、删除操作,时间复杂度为O(1)。

容器能否替代数组

容器的优势:对于Java语言,容器封装了数组插入、删除等操作的细节,并且支持动态扩容。
对于Java,一些更适合用数组的场景:
1、Java的ArrayList无法存储基本类型,需要进行装箱操作,而装箱与拆箱操作都会有一定的性能消耗,如果特别注意性能,或者希望使用基本类型,就可以选用数组。
2、若数组大小事先已知,并且对数组只有非常简单的操作,不需要使用到ArrayList提供的大部分方法,则可以直接使用数组。
3、多维数组时,使用数组会更加直观。

JVM标记清除算法?

GC最基础的收集算法就是标记-清除算法,如同他们的名字一样,此算法分为“标记”、“清除”两个阶段,先标记出需要回收的对象,再统一回收标记的对象。不足有二,一是效率不高,二是产生碎片内存空间。

数组的内存寻址公式?

一维数组:a[i]_address=base_address+itype_size
二维数组:二维数组假设是m
n, a[i][j]_address=base_address + (in+j)type_size
三维数组:三维数组假设是mnq, a[i][j][k]_address=base_address + (inq + jq + k)type_size

最后解决引子问题:

为什么很多编程语言的数组都是从0开始编号的?

1、从数组存储的内存模型上来看,“下标”确切的说法就是一种“偏移”,相比从1开始编号,从0开始编号会少一次减法运算,数组作为非常基础的数组结构,通过下标随机访问元素又是非常基础的操作,效率的优化就要尽可能的做到极致。
2、主要的原因是历史原因,C语言的设计者是从0开始计数数组下标的,之后的Java、JS等语言都进行了效仿,或者说是为了减少从C转向Java、JS等的学习成本。

相关文章

  • 数组

    数组数组数组数组数组数组数组数组数组

  • JavaScript - 5.数组<增删改查>

    数组 Array 数组 - 增 数组 - 删 / 改 数组 - 查 数组 - 自动 toString() 数组 -...

  • PHP数组使用

    数组定义 数组增、删、改 数组查询 数组排序 数组合并、分割 数组比较、去重复 数组长度 数组遍历 数组转换 其他...

  • 》》》PHP初入---(三)

    数组定义 1.索引数组:数组下标是整型的 声明数组: 访问数组: count(数组)--获取数组长度 查看数组所有...

  • JavaScript中数组的常用操作

    数组的遍历 数组的映射 数组的简化 数组的连接 获取数组的片段 数组的拷贝 查找数组 数组去重

  • JavaSE之数组

    六、数组 目录:数组概述、数组声明创建、数组使用、多维数组、Array类、稀疏数组 1.什么是数组 数组的定义:数...

  • Shell数组、关联数组

    数组 定义数组 获取数组 关联数组 定义关联数组 获取关联数组

  • 学习Java第五天

    数组是多个数据的集合 数组的语法 数组元素类型【】 数组名; 多维数组: 数组元素类型【】【】 数组名; 多维数组...

  • php基础精粹

    PHP php数组 php数组之索引数组初始化 PHP数组之索引数组赋值 PHP数组之访问索引数组内容 PHP数组...

  • C语言的惯用集

    数组部分 数组部分 清空数组a 把数据读进数组a 对数组a求和

网友评论

      本文标题:数组

      本文链接:https://www.haomeiwen.com/subject/mvdsohtx.html