位置: 编程技术 - 正文

从数据结构分析看:用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编程艺术这本书好吗)

  • 什么是资本利得?
  • 哪些费用可在缴纳医保
  • 所得税申报资产不允许为0?
  • 一般纳税人的进项税额计入成本吗
  • 进项抵扣的金额怎么算
  • 金融服务担保费会计处理
  • 单位结算卡在pos渠道可办理的功能
  • 酒店租金计入什么会计科目
  • 无偿使用期限为多少年
  • 预收账款核销的流程
  • 公司还没有核税该如何进行业务汇款?
  • 开给个人的普票怎么做分录
  • 显示已申报税额
  • 非独立核算的分公司如何报税
  • 详细解读财税[2014]75号文件
  • 房地产企业按照功能可分为
  • 物业公司营改增后收入的确认
  • 已经销售但是没货怎么办
  • 存货损失的账务处理
  • 公司买珠宝会计分录
  • win11开机黑屏进不去桌面
  • 上月发票未上传
  • 成本法 合并
  • 完美解决怠速抖动加油就平稳
  • 企业向股东发放现金股利
  • hdaudpropshortcut.exe是什么进程 作用是什么 hdaudpropshortcut进程查询
  • 月末增值税计算公式
  • 股东怎么签合同
  • 开发票金额少于付款金额差额怎么入账?
  • 生产企业自营出口应税消费品
  • 合伙养殖需要注意什么
  • 固定资产折旧怎么做账务处理
  • 发行债券的会计分录摊销
  • vue的watch监听
  • 堡垒封印
  • php的用处
  • 房屋权属变更什么意思
  • 深度学习中正样本、负样本、简单样本、困难样本的区别 (简单易懂)
  • acc字幕文件怎么转换srt字幕
  • vue中的路由参数如何获取
  • kill命令用法
  • 公司赎回股票
  • 应付职工薪酬如何确认
  • 企业财务报表有附注吗
  • mongodb从入门到商业实战
  • 固定资产已提完折旧报废后如何处理
  • 经营所得预缴申报收入总额
  • 开专票一定要写明细吗
  • 土增清算后再销售
  • 押金和租金
  • 小规模纳税人出租不动产优惠政策
  • 暂估入库没有票怎么冲掉
  • 公司购买的商品质量问题能用12315投诉吗
  • 工程公司本月没发工资
  • 企业大额融资需要什么资料
  • 公司购买的车辆
  • 金蝶凭证做错了已经入账怎么更正
  • 总账会计工作流程表
  • sql参数化还是被注入了
  • 打开电脑windows
  • windows vista好用吗
  • cmos设置密码开机密码
  • mac电脑废纸篓清空文件恢复
  • 电脑桌面图标有虚影怎么回事
  • reader_sl.exe - reader_sl进程有什么用.
  • 淘宝win10和正版的有什么区别
  • win10每次登录都要输入微软密码
  • linux检测硬件
  • linux的安装教程
  • window系统设置
  • node js安装教程
  • javascript中math.ceil
  • [置顶]JM259194
  • 解读JavaScript中 For, While与递归的用法
  • os模块 python
  • pythondjango框架 目录结构
  • 成都燃气在线查询
  • 商铺缴纳契税需要复印件吗
  • 武汉税务局官网查询系统
  • 税务24号公告
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设