1.数组

作者: conanlee88 | 来源:发表于2020-05-10 15:06 被阅读0次

数组

定义

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

特性

  • 线性数据结构
  • 连续的存储空间及相同的数据类型
    • 随机访问有优势
    • 插入和删除比较麻烦,需做大量的数据搬移操作

优化

  • 插入
    • 当数组存储数据没有规律时,只是作为一个存储数据的集合,此时向第k位插入时,可以先将原来k位上的数据移到最后,将新数据添加到k位上
  • 删除
    • 当数组有多次删除操作时,可以先将要删除的数据标记起来,然后再在一定的时机下进行真正的删除操作 (JVM标记清除垃圾回收算法的核心)

注意事项

  • 数组访问越界
    • 在C语言中,只要不是访问受限的内存,所有的内存空间都是可以自由访问的。因此,很多计算机病毒正是利用代码中的数组越界可以访问到非法地址的漏洞来攻击系统,所以写代码的时候要时刻注意数组越界问题

动态数组ArrayList

  • 使用ArrayList我们可以不用关心底层的扩容逻辑,当每次容量不够时,它都会自动将空间扩大为原有的1.5倍
    注:扩容操作涉及内存申请和数据搬移,是比较耗时的。所以,如果事先能确定需要存储的数据大小,最好在创建 ArrayList 的时候事先指定数据大小
  • 与数组之间的比较
    • ArrayList无法存储基本数据类型,需使用其包装类,而Autoboxing和unboxing则有一定的性能消耗,当比较关心性能时,优先使用数组
    • 如果数据大小事先已知,并且数据操作很简单的时候,优先使用数组
    • 表示多维数据的时候,用数组会更加直观

思考

为什么数组下标是从0开始?

  • 当数组下标从1开始时,第k个数据的地址值的算法变成 a(k) = base_address + (k - 1) * type_size,这样CPU多了一次减法操作,从0开始可以避免这个问题而达到优化的目的

相关文章

  • 1.数组

    一.初试数组 如何写一个程序用户计算用户输入的数字的平均数? *如何写一个程序用户计算用户输入的数字的平均数,并输...

  • 1.数组

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

  • 1. 数组, 数组翻转

    Java的数组,在程序运行期间,长度是不能改变的。但是可以从新new一个数组,并让这个变量保存新数组的地址。 一个...

  • 1. 集合 & 数组

    数组:固定长度的对象容器,存储基础类型。[] 集合:动态长度的对象容器,只能存储对象。 collection 一、...

  • 1.数组(一)

    https://leetcode-cn.com/tag/array/ 题目汇总1. 两数之和简单4. 寻找两个有序...

  • 1. 顺序存储 --- 数组

    顺序存储一般的结构如数组,标准的初始化时需要的是"基址,当前表长,最大表长" 数组的首地址(基址)就是数组名 数组...

  • 1.数组与矩阵

    1.矩阵是二维数组。 数组分为5类 1.空数组 a=[]2.标量 a=[5]3.向量 行向量...

  • 1.数组队列

    数组实现单队列 数组实现循环队列

  • 数组---1. Two Sum

    1. Two Sum Given an array of integers, return indices of ...

  • 1. 数组与矩阵

    [toc] 3. 数组中重复的数字 思路:数组数字范围为1-n,统计count[num]即可 4. 二维数组中的查...

网友评论

      本文标题:1.数组

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