数组

作者: 牛牛_735d | 来源:发表于2019-12-20 11:39 被阅读0次

数组: 用一组连续的内存空间、存储一组具有相同数据类型的线性表数据结构

1.线性表: 数据只有前、后两个方向. 链表、队列、桟也是线性结构
2.连续空间、数据类型相同: 使得数组可以随机访问、但: 插入、删除数据的效率就低很多、需要数据重排
插入和删除
1.插入
  1) 末尾插入、无需移动元素、复杂度 O(1)
  2) 头部插入、搬移全部元素、复杂度 O(n)
  每个位置插入的概率相同、平均复杂度为 (1+2+3+...n)/n = O(n)
 
  若数组有序、只需要搬移k之后的数据
  若数组无序、且不要求有序、将k位置的元素直接搬移到最后、只需要一次搬移 O(1)
  
2.删除
  1) 与插入类似、最好O(1) 最坏O(n) 平均O(n)
  2) 删除多(m)个元素时、可先标记删除(只标记)、后一次性删除、节省m*O(n)次操作
     JVM的标记清除算法的核心

容器能否代替数组 ?

1. arrayList 将数组操作的细节封装. eg. 数据搬移
2. arrayList 支持动态扩容、默认扩容是1.5 
   扩容涉及到内存申请和数据搬移、比较耗时、若知道数据存储大小时、最好指定大小
   
 1. 容器无法存储基础类型、eg. int, long, 需要封装为 Integer、Long 而自动装箱则有部分性能损耗
 2. 若数据大小已知、且操作特别简单、可直接使用数组
 所以、对业务开发基本上直接使用容器就好、省力、不易出错、丢失的性能可以不太关注、不影响整体性能
 对底层开发、性能要做到极致、数组就优于容器成为首选
 
为什么大部分编程语言中、数组从0开始编号
下标确切定义是: 偏移offset、
1.使用a表示首地址、a[0]就是偏移为0的位置、即首地址、a[k]表示第k个type_size的地址
  a[k]_addr = base_addr + k*type_size
2.若使用1开始计数、则
  a[k]_addr = base_addr + (k-1)*type_size 
 从1开始编号、对于CPU来说、就是多了一次减法运算
 
        

相关文章

  • 数组

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

  • 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/lqgbnctx.html