位置: 编程技术 - 正文

从数据结构分析看:用for each...in 比 for...in 要快些(数据结构分析时间复杂度)

编辑:rootadmin

之前听说火狐的JS引擎支持for each in的语法,例如下述的代码:即可直接遍历出arr数组的内容。

由于只有FireFox才支持,所以几乎所有的JS代码都不用这一特征。

不过在ActionScript里天生就支持for each的语法,不论Array还是Vector,还是Dictionary,只要是可枚举的对象都可以for in和for each in。

之前并没有感觉有太大的差异,为了懒得敲一个each单词,一直用熟悉的for in来遍历。

不过今天仔细琢磨了会,从数据结构的角度分析了下,觉得for in和for each in效率上有着本质的区别,无论是JS还是AS。

原因很简单:Array不是真正意义上的数组!

何为真正意义的数组?当然就是传统语言里type[]定义的数据类型,所有元素都是连续保存的。

“Array”虽然也是数组的意思,但熟悉JS的都知道,它其实是个非线性的伪数组,下标可以是任意数字。写入arr[]并非真正申请容纳一百万个元素的空间,而是把转换成相应的哈希值,对应到很小一块储存空间里,从而节省了大量内存。

例如有如下数组:

用for...in遍历Array,是个很累赘的过程:

遍历时每次访问arr[k],都要进行一次Hash(k)计算,根据散列表的容量取模,最终在冲突链表里找到结果。

如果支持for each...in的语法,其内部的数据结构就决定了会快很多:

Array里储存存了keys的列表,也把每个values值作为链表关联起来。每当有值添加或删除,就更新其链接关系。

当for each...in遍历时,只需从第一个节点往后迭代即可,无需任何Hash计算。

当然,对于AS3里Vector这样的线性数组来说,两者相差不大;同理,HTML5里支持二进制的数组ArrayBuffer也是如此。不过从理论上来看,即使arr是个连续的线性数组,for each in还是要快一点:

for...in遍历时,每次访问arr[k]都要进行下标越界检查;而for each in则根据内部链表,直接从底层反馈出迭代变量,节省了越界检查的过程。

推荐整理分享从数据结构分析看:用for each...in 比 for...in 要快些(数据结构分析时间复杂度),希望有所帮助,仅作参考,欢迎阅读内容。

从数据结构分析看:用for each...in 比 for...in 要快些(数据结构分析时间复杂度)

文章相关热门搜索词:数据结构分析时间复杂度,数据结构分析时间复杂度,数据结构分析与总结,从数据结构分析数据类型,数据结构分析题例题,数据结构分析题例题,数据结构分析是什么专业,从数据结构分析数据类型,内容如对您有帮助,希望把文章链接给更多的朋友!

基于dom编程中 动态创建与删除元素的使用 htmlheadscripttype="text/javascript"functiontest(){//createElement()创建一个指定标签名的元素[比如:动态创建超链接]varcreatea=document.createElement("a");createa.id="a1";createa.inn

JavaScript substr() 字符串截取函数使用详解 substr定义和用法substr()方法可在字符串中抽取从start下标开始的指定数目的字符。语法stringObject.substr(start,length)参数描述start必需。要抽取的子串的起始

Web Inspector:关于在 Sublime Text 中调试Js的介绍 SublimeText是一款非常优秀的跨平台编辑器,拥有漂亮的用户界面和强大的功能,例如代码缩略图,多重选择,快捷命令等。还可自定义键绑定,菜单和工

标签: 数据结构分析时间复杂度

本文链接地址:https://www.jiuchutong.com/biancheng/377683.html 转载请保留说明!

上一篇:关于eval 与new Function 到底该选哪个?(下列关于eval()函数的说法正确的是)

下一篇:基于dom编程中 动态创建与删除元素的使用(dom编程艺术这本书好吗)

  • 当月不发工资会影响社保吗
  • 监理公司成本核算方法
  • 母公司与子公司的区别
  • 法人可不可以办信用卡
  • 应收账款和应付账款对冲会计分录
  • 煤炭企业会计制度
  • 小规模纳税人和个体工商户的税收政策
  • 无形资产减值是否可以转回
  • 小企业作废的发票怎么开
  • 逐步测试法计算内含报酬率
  • 银行存款收款凭证是原始凭证吗
  • 企业收入进私户怎么做账
  • 境内企业转让境外股权税收
  • 营改增转让土地税收政策
  • 案例分析两个分公司转资金怎么做账?
  • 房地产开发经营属于什么行业类别
  • 待转销项税额结转分录
  • 收到发票,未付款,付款的时候需要把发票复印做附件吗
  • 钻井采用的主要设备
  • 广告公司固定资产有哪些?
  • 跨年度多计提的租金怎么冲
  • 汽车装饰用品大全进货
  • 税控盘逾期未抄报,交罚款需要带什么
  • 季度申报的小规模纳税人怎么查看销售额达到500万
  • 查补的增值税如何申报
  • 鸿蒙工具栏在哪里
  • 电脑经常蓝屏修复
  • 会计谨慎性原则是指
  • win7怎么更改开机启动项
  • bhvc.exe
  • 发票交付在哪里
  • php开发过程遇到的难题
  • 增值税附加税必须交吗
  • 残保金怎么计算公式
  • /t python
  • qt opencv ffmpeg
  • 往来款的意思
  • 织梦使用教程
  • python字符串isdigit
  • 安装centos7.2
  • mysql的文件格式有哪些
  • 向投资者分配现金股利为什么会导致所有者权益减少?
  • 纳税申报表上的销售额是不含税的吗
  • 资产负债表坏账准备计入哪里科目
  • sqlserver控制台
  • 白酒消费税计税价格由谁核定
  • 预收一年房租的会计科目
  • 现金支票存根金额怎么写
  • 增值税未开票收入
  • 新开立银行账户怎么办理
  • 利润总额是负数怎么计算利润率
  • 去年所得税汇算清缴报表填错了今年可以改吗
  • 企业缴纳社保费包括企业部分和个人部分
  • 应交税费进项税额转出是什么意思
  • 小规模附加税优惠政策最新2023
  • 商品进销差价的作用
  • 计提时的会计分录
  • 定额发票累计领取怎么算
  • 会计里面权益是什么
  • 简易征收是什么意思和一般纳税人
  • mysql删除表数据怎么恢复
  • sqlserver时间格式转换yyyy-mm
  • mac怎么复制文件路径地址
  • 苹果电脑的重新启动在哪里
  • windows取消隐藏文件夹
  • linux的web
  • centos怎么安装yum源
  • window10正版系统怎么装
  • python挑战
  • Android NDK Cocos2dx 3.4 Label中文显示
  • 推荐10 个很棒的电影
  • Android与OpenCV2.4.4(2013最新)搭建图像处理框架
  • 经过整理的一些成语
  • css行与行之间的间距怎么调
  • Python3.6 Schedule模块定时任务(实例讲解)
  • js arrayfrom
  • 重庆地方税务局刘飞虎
  • 小规模纳税人销售货物税率是多少
  • 公司地税申报
  • 企业可以出台政策吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设