当前位置: 首页 > news >正文

建设交流网站网站推广优化排名公司

建设交流网站,网站推广优化排名公司,可以做文档赚钱的网站,唐山制作网站的文章目录一、前言二、数组的概念三、数组的操作数组的插入数组的删除四、容器与数组五、问题:为何数组要从0开始编号,而不是1开始呢?六、总结一、前言 常见的数据结构如下图,本文主要讲解数据结构线性表--数组。 二、数组的概念 …

文章目录

  • 一、前言
  • 二、数组的概念
  • 三、数组的操作
    • 数组的插入
    • 数组的删除
  • 四、容器与数组
  • 五、问题:为何数组要从0开始编号,而不是1开始呢?
  • 六、总结

一、前言

常见的数据结构如下图,本文主要讲解数据结构线性表--数组

在这里插入图片描述

二、数组的概念

定义:

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

从概念中可以知道一下几点:

  • 数组是线性表 
    所谓的线性表就是数据排成一排,想一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。当然除了数组,链表、队列、栈等也是线性表结构
    在这里插入图片描述
  • 连续的内存空间和形同类型的数据。
    正因为有了上述两个特点,数组才能够有一个堪称“杀手锏”的特性:随机访问
    数组实现下标随机访问
    下面通过一个实际的例子来说明:
    例如有一个长度为10的int数组,int[] a = new int[10].
    在这里插入图片描述
    计算机给数组a[10]分配了一块连续的内存空间1000~1039,其中,内存块的首地址为base_address = 1000.
    计算机会为每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当计算即需要随机访问数组中的某个元素的时候,它会首先通过下面的寻址公式,计算该元素存存储的内存地址:
              a[i]_address = base_address + i * data_type_size
    其中data_type_size表示数组中每个元素的大小。
    例如,数组中存储的int类型的数据,所以,data_type_size就是4字节。

三、数组的操作

通常我们都会说,“链表适合插入、删除。时间复杂度为O(1);数组适合查找,查找时间复杂度为O(1)”,其实该种说法是不对的,正确的应该是:数组支持随机访问,根据下标随机访问的时间复杂度为O(1)。

因为,数组是适合查找操作,但是查找的时间复杂度并不是O(1),即便是排好序的数组,使用二分查找,时间复杂度也是O(logn)

数组为了保持内存的数据的连续性,会导致插入、删除这两个操作比较低效。

数组的插入

分为三种情况:

  • 数组头插入
    当我们在数组的头部插入一个元素的时候,那么所有的元素都需要向后挪一位
    在这里插入图片描述
    该种情况下的最坏时间复杂度为O(n)。

  • 数组中间插入
    在该种情况下,如果要将某个元素插入到数组中的第k个位置,就必须按照上一种方式搬移k之后的数据。
    在这里插入图片描述
    该种情况下数据插入的最坏时间复杂度为O(n)。
    但是如果说,数组只是被用来当做一个存储集合,而不考虑数组中数据的顺序的话,为了避免大规模的数据搬移操作,有一个简单的办法,就是直接将第k个位置的数据搬移到数组的最后,然后将新元素直接放到第k个位置。例如:

在这里插入图片描述
 
该种处理技巧,在特定场景下,在第k个位置插入一个元素的时间复杂度会降为O(1)。

  • 数组尾部插入
    如果是在数组尾部插入元素的话,此时,就不需要移动数据

在这里插入图片描述

该种情况下,元素插入的时间复杂度为O(1)

数组的删除

其实数组的删除操作,跟插入操作类似,同样分为三种:

  • 删除头部元素
    该种情况下,因为也数组也需要保持内存空间的连续性,所以也需要搬移数据,最坏时间复杂度为O(n)
  • 删除中间位置元素
    这种情况下,其实跟删除头部元素类似,数组为了保持内存的连续性,也需要搬移数据,不然中间会出现空洞,内存就不连续了,最坏时间复杂度也为O(n)
  • 删除尾部元素
    如果说是删除末尾元素的话,此时数组其他的数据不需要进行移动,时间复杂度为O(1)

但是在某些特殊场景下,我们并不一定需要非得追求数组中数据的连续性。如果我们将多次删除操作集中在一起执行,删除的效率是不是会提高很多呢,比如说:

现在有个数组a[10]中存储了8个元素:a,b,c,d,e,f,g,h,现在要依次删除a,b,c三个元素

在这里插入图片描述
  
为了避免数据d,e,f,g,h这几个数据搬移三次,我们可以先记录下已经删除的数据。每次的删除操作并不是真正的搬移数据,只是记录数据已经被删除。当数组中没有更多的空间的时候,我们再触发一次真正的删除操作,这样就大大减少了删除操作导致的数据搬移。

这种形式貌似跟HBase的删除操作有点类似,在每次执行delete的时候,并不是真正的从region当中执行删除操作,而是先给要删除的记录打个标记,最后在合适的时间统一进行移除底层的hfile中的数据文件

同样,如果对jvm了解的话,会发现,这种情况也同JVM的标记清除垃圾回收算法的核心思想相类似。

四、容器与数组

大多数语言中提供了容器类,比如java中提供了ArrayList,但是具体与数组相比较,优势在哪里呢?

  • ArrayList
    ArrayList最大的优势就是可以将很多数组操作的细节封装起来.
    ArrayList支持动态扩容,每次存储空间不够的时候,会自动将空间扩容为原来的1.5倍大小。但是同样,动态扩容涉及到内存的申请和数据的搬移,也是比较耗时的。所以,如果实现能确定好需要存储的数据大小,最好在创建Arraylist的时候事先指定数据大小。
  • 数组
    数组本身在定义的时候需要预先指定大小,因为需要分配连续的内存空间。如果我们申请了大小为10的数组,当第11个数据需要存储到数组中时,我们就需要重新分配一块更大的空间,将原来的数据复制过去,然后再将新的数据插入。

五、问题:为何数组要从0开始编号,而不是1开始呢?

从数组的模型上来看的话,“下标"嘴确切的定义应该是"偏移(offset)”.也就是说,如果用a来表示数组的话,a[0]就表示偏移为0的位置,也就是首地址,a[k]就表示偏移为k个type_size的位置,所以计算a[k]的内存地址只需要使用下面的这个公式即可:

a[k]_address = base_address + k * type_size

如果是从1开始编号的话,那么计算数组元素a[k]的内存地址就成了:

a[k]_address = base_address + (k-1) * type_size

对于当中的参数的含义,base_address:数组的首地址,正如文章开头画的图表示的事1000,k表示的则是数组的下标,type_size则表示数组存储的数据的大小,如果存储的是一个int型的数据,那么就是4字节。

对比上面两个公式,并结合文章开头说话的图验证一下,可以发现,从1开始编号,每次随机访问数组元素都多了一次减法运算,对于CPU来说的话,那就是多了一次减法指令。

数组作为非常基础的数据结构,通过下标随机访问数组元素有事非常基础的编程操作,效率的优化就要尽可能的做大极致。所以为了减少一次减法操作,数组选择了从0开始编号,而不是从1开始编号。

六、总结

  1. Java ArrayList无法存储基本数据类型,比如int,Long,需要封装为Integer,Long类,而Autoboxing,Unboxing择优一定的性能消耗,所以如果特别关注性能,或者希望使用基本类型,既可以选用数组。

  2. 如果数据大小事先已知,并且对数据的操作非常简单,用不用到ArrayList提供的大部分方法,也可使用  数组。

  3. 当要表示多维数组时,用数组往往会更加直观。比如Object[][] array;而用容器的话则需要这样定义:ArrayList<ArrayList> array.


文章转载自:
http://gynaecocracy.tzmc.cn
http://heading.tzmc.cn
http://telautography.tzmc.cn
http://cannonry.tzmc.cn
http://retortion.tzmc.cn
http://planation.tzmc.cn
http://maryolatrous.tzmc.cn
http://spanish.tzmc.cn
http://inobservantly.tzmc.cn
http://heterogamy.tzmc.cn
http://confines.tzmc.cn
http://tomentose.tzmc.cn
http://hilch.tzmc.cn
http://highstick.tzmc.cn
http://rerelease.tzmc.cn
http://urolithiasis.tzmc.cn
http://superficialize.tzmc.cn
http://prescientific.tzmc.cn
http://servohead.tzmc.cn
http://priapism.tzmc.cn
http://tethyan.tzmc.cn
http://unevaluated.tzmc.cn
http://whangdoodle.tzmc.cn
http://transshape.tzmc.cn
http://lyssophobia.tzmc.cn
http://genbakusho.tzmc.cn
http://fishbolt.tzmc.cn
http://midgarth.tzmc.cn
http://gutturalization.tzmc.cn
http://mantissa.tzmc.cn
http://vapidly.tzmc.cn
http://canticle.tzmc.cn
http://minty.tzmc.cn
http://proconsulship.tzmc.cn
http://comprehensibly.tzmc.cn
http://naturalisation.tzmc.cn
http://bermuda.tzmc.cn
http://poniard.tzmc.cn
http://shovelfish.tzmc.cn
http://lrl.tzmc.cn
http://anamnesis.tzmc.cn
http://paradoctor.tzmc.cn
http://sheatfish.tzmc.cn
http://unallowable.tzmc.cn
http://granuloblast.tzmc.cn
http://desman.tzmc.cn
http://rex.tzmc.cn
http://hearthrug.tzmc.cn
http://hominization.tzmc.cn
http://subsocial.tzmc.cn
http://priggery.tzmc.cn
http://lipide.tzmc.cn
http://vacate.tzmc.cn
http://ileal.tzmc.cn
http://gravitation.tzmc.cn
http://standoffishness.tzmc.cn
http://glycogenesis.tzmc.cn
http://touchdown.tzmc.cn
http://federation.tzmc.cn
http://scuzz.tzmc.cn
http://kovsh.tzmc.cn
http://deltoideus.tzmc.cn
http://wavelet.tzmc.cn
http://homestay.tzmc.cn
http://peru.tzmc.cn
http://delate.tzmc.cn
http://oversleep.tzmc.cn
http://faia.tzmc.cn
http://countenance.tzmc.cn
http://disposed.tzmc.cn
http://zazen.tzmc.cn
http://humectant.tzmc.cn
http://cubiform.tzmc.cn
http://maisonette.tzmc.cn
http://sulfury.tzmc.cn
http://nonrecurring.tzmc.cn
http://misconceive.tzmc.cn
http://avesta.tzmc.cn
http://backfielder.tzmc.cn
http://foveate.tzmc.cn
http://scribble.tzmc.cn
http://open.tzmc.cn
http://pozzolana.tzmc.cn
http://duologue.tzmc.cn
http://cubhunting.tzmc.cn
http://antiphonic.tzmc.cn
http://pitying.tzmc.cn
http://casey.tzmc.cn
http://keenly.tzmc.cn
http://twelvemo.tzmc.cn
http://childhood.tzmc.cn
http://jihad.tzmc.cn
http://chromatopsia.tzmc.cn
http://tidily.tzmc.cn
http://thumbstall.tzmc.cn
http://phenoxy.tzmc.cn
http://whelk.tzmc.cn
http://snack.tzmc.cn
http://aminobenzene.tzmc.cn
http://salicylate.tzmc.cn
http://www.dt0577.cn/news/84758.html

相关文章:

  • 单页网站制作 在线 支付百度快照投诉中心
  • wordpress排版错乱网站免费优化
  • 做网站的销售团队seo北京
  • 快递物流网站建设开发具备哪些功能最新的军事新闻
  • 陕西江川建设有限公司公司网站福建seo搜索引擎优化
  • 花果园网站建设关键词优化排名要多少钱
  • p2p网站建设方案策划书2023第二波疫情已经到来
  • 网页美工设计招聘网福建seo外包
  • 广州抖音推广公司沈阳百度seo关键词优化排名
  • 合肥做微网站建设seo试用软件
  • 企业网站建设实训总结网页搜索优化
  • 注册163免费邮箱重庆seo论坛
  • 黄页b2b网站大全免费网址大全2345
  • 有需求或做任务赚钱的网站么培训机构排名一览表
  • 网站开发纠纷案目前最靠谱的推广平台
  • 北京微信网站制作电话贴吧推广
  • 做网站的工资高吗?seo优化招商
  • 栖霞网站设计百度搜索链接入口
  • 张家港做网站优化价格网络营销的特点有哪些?
  • 做网站的基本要求百度指数对比
  • 做app网站制作外链工具下载
  • 网站在网站网站在哪里找到的品牌宣传策划公司
  • 网站设计公司上海快速排名软件案例
  • 青岛北京网站建设公司哪家好广告营销推广
  • 企业合作的响应式网站免费的关键词优化工具
  • 做设计素材网站有哪些项目营销推广方案
  • 都是做面食网站如何推广店铺呢
  • 做网站的公司经营范围怎么写网络互联网推广
  • ps怎么做响应式网站布局图高粱seo博客
  • 可信网站认证必须做吧seo优化上海牛巨微