• 数据结构和算法二(数组)


    一、数组

    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来说,多了一次减法的指令。当然,还有历史原因,这个自己搜索去。

  • 相关阅读:
    HTTP——Web服务器、代理、缓存
    nginx配置文件详解2
    nginx配置文件详解
    shell笔记2
    django笔记
    python 发请求,urllib,urllib2
    nginx配置
    python os模块学习
    mac 终端命令小结
    mac常用命令笔记
  • 原文地址:https://www.cnblogs.com/jakaBlog/p/11284515.html
Copyright © 2020-2023  润新知