zoukankan      html  css  js  c++  java
  • 数据结构(一):数组

    一、概述

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

      • 线性表数据结构:数据排成像一条线那样的线性结构

      • 连续的内存空间:数据在内存里面的存储空间是连续的一块内存

      • 具有相同类型:数组里面的所有数据的数据类型是相同的

    • 示例代码

      • int[] array = new int[3];
      • 由上述代码我们可以看出来,使用数组我们需要指定数组的长度

      • Array数组是无法动态扩容的,我们需要预先指定它的长度

    二、图示结构

    • 上图是数组简单的结构,图中的内存地址是为了方便假设的地址,真实的内存地址要比这复杂

    三、操作数组的时间复杂度

    • 查询

      • 我们可以直接通过array[index]的方式来访问数组,所以来说,数组支持随机访问,根据下标随机访问的时间复杂度为O(1)

      • 注意:我们并不能笼统的来说数组的查询复杂度为O(1)
    • 插入

      • 由上图我们可以看出来,在数组指定位置插入一个元素,这个位置之后的所有数据都要往后挪一个位置,所以这种情况的时间复杂度为O(n);

      • 最理想的状态下是在该数组的尾部插入一个元素,这样一个元素都不用挪动,这时的时间复杂度为O(1)

      • 综上,数组插入的时间复杂度为:O(n)

    • 删除

      • 删除数组中指定位置的一个元素,删除之后,这个位置之后的所有数据都要向前挪动一个位置,这时时间复杂度为O(n)

      • 如果是删除数组尾部的元素的话,数组中元素都不用挪动,这个时候时间复杂度为O(1)

      • 综上,在数组中删除一个元素的时间复杂度为O(n)

    四、动态数组(ArrayList)

    • 基本概念和用法:

      • ArrayList可以动态的进行扩容,我们在声明时不需要指定它的长度

      • ArrayList不存储基本数据类型,它存储的是基本数据类型的封装类型

      • 如果声明的时候不指定类型的话,它是可以存储多种类型的数据的

    ArrayList list = new ArrayList();
    list.add(1 );
    list.add("元素");

    • 注意事项:

      • 因为ArrayList是动态扩容的,当空间不够用时它会自动扩容,自动扩容是要消耗计算机资源的,所以如果我们的数组大小长度是确定的,优先使用Array数组

      • 因为ArrayList存储的是基本数据类型的封装类型,所以该数组的存取是需要进行拆箱和装箱操作的,这一点相比Array而言也是比较消耗性能

    转载请注明出处:https://www.cnblogs.com/Infancy/p/12591445.html

  • 相关阅读:
    使用zinnia制作android手写输入功能(上)编译zinnia
    Raphael实例
    正则表达式 笔记
    已知弧长和弦长求半径
    Raphael参考 翻译完毕
    在chorme中查找多余的css规则
    CSS3中Transform
    手机移动端WEB资源整合
    JS判断移动设备最佳方法 并实现跳转至手机版网页
    让IE和Firefox兼容的CSS技巧集合css hack
  • 原文地址:https://www.cnblogs.com/Infancy/p/12591445.html
Copyright © 2011-2022 走看看