zoukankan      html  css  js  c++  java
  • 数据结构和算法二(数组)

    一、数组

    1.概念

    • 数组是一种线性表数据结构,它用一种连续的内存空间,来存储一组具有相同类型的数据。
    • 线性表:数组、链表、队列、栈等
    • 非线性表:二叉树、堆、图等

    2.连续的内存空间和相同类型的数据

    • 优点:具有随机范文的特性,根据下标随机访问的时间复杂度为O(1)
    • 缺点:低效的插入和删除
      • 插入:最好O(1),最坏O(n),平均O(n)
      • 插入:数组若无序,插入新的元素时,可以将第K个位置元素移动到数组末尾,把新的元素插入到第K个位置,此时复杂度为O(1)
      • 删除:最好(1),最坏O(n),平均O(n)
      • 将多次删除操作中集中在一起执行,可以先记录已经删除的数据,但是不进行数据迁移,而仅仅是记录,当发现没有更多空间存储时,再执行真正的删除操作。这也是 JVM 标记除垃圾回收算法的核心思

    3.使用数组还是容器

    • 数组必须先指定空间的大小,而容器例如ArrayList可以动态的扩容(扩容时比较耗内存,因为涉及到内存申请及数据的搬移)
    • 如果要存储基本的数据类型,可以用数组;容器无法存储基本类型,只能存储基本类型的包装类型,这样在装箱拆箱时会损耗性能
    • 事先知道数据大小,并且操作简单,可以用数组
    • 直观表示多维,可以用数组,例如Object[][],用容器时只能是ArrayList;
    • 业务开发一般使用容器,开发框架,追求性能时,优先考虑数组。

    4.为什么数组从0开始编号

    由于数组是通过寻址公式计算该元素存储的内存地址的

    a[i]_address = base_arress+i*data_type_size
    

    如果数组是从1开始计数,那么公式就会变为

    a[i]_address = base_arress+(i-1)*data_type_size
    

    对于CPU来说,多了一次减法的指令。当然,还有历史原因,这个自己搜索去。

  • 相关阅读:
    在仅有的一次生命里活出自己最大的可能
    每个人都渴望赞美
    历练领导力的八字要诀
    爱情语录
    Ps
    别跟我要钱,我是教授
    改变人生的五个问题
    纪晓岚妙用口才
    智慧和智商
    经典
  • 原文地址:https://www.cnblogs.com/jakaBlog/p/11284515.html
Copyright © 2011-2022 走看看