位置: 编程技术 - 正文

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

  • 房产税计税依据包括土地价值吗
  • 个人偶然所得税率多少
  • 汇票签收后可以撤回吗
  • 银行存款产生的利息怎么写分录
  • 进项税未抵扣进账了怎么处理
  • 金税盘全额抵扣申报流程
  • 离婚财产分割涉及偷税漏税可以移交税务局调查吗
  • 处理企业的财产有哪些
  • 加计扣除退回的所得税怎么做账
  • 冲销暂估入账原材料的会计分录
  • 单位处置车辆账务处理
  • 工资未发放是否可以仲裁
  • 进项发票账务处理
  • 股票红利税如何征收
  • 自产自销税点
  • 增值税税控系统专用设备注销发行
  • 能够影响现金流的因素有
  • 转账户有误退回会计处理
  • 异常抵扣凭证进项税转出入哪个所属期
  • 缴纳残保金和工龄有关吗
  • 如何查出账外收入
  • 社保会计分录怎么写
  • 笔记本cpu天梯图苹果
  • win7玩什么游戏流畅
  • php数组函数,选班长
  • mac 移动硬盘 文件系统
  • 超市赠送消费券怎么用
  • Linux系统中quota磁盘命令的相关使用解析
  • 交易性金融资产的入账价值
  • RunClubSanDisk.exe是什么程序? 闪迪U盘广告推介程序
  • 滞纳金不得超过税款
  • 代理服务费怎么入账
  • php header refresh
  • php数据的提交与采集实验报告
  • 计算机视觉项目论文
  • 投资性房地产在资产负债表中的列示
  • 购买图书可以开增值税专票么?
  • 增值税发票没认证可以退回吗
  • 收到工会经费返还属于现金流量表哪
  • 自由会计服务类工作者
  • 怎么确定应付账款的完整性
  • 配电室增容验收标准
  • 公司法人代表可以有几个
  • 应付账款的四大基本要素
  • 企业银行贷款报表模板
  • 有限合伙企业中谨慎有限合伙人的应当
  • 房地产公司销售土地使用权
  • 转出上年的进项税怎么算
  • 购进的材料没有发票可以入库吗?
  • 购买发票打印机如何账务处理?
  • 租房公司报销发票怎么开
  • 会计可以用收据做账吗
  • mysql 备份和恢复
  • win8固态硬盘
  • 怎么把iphone作为u盘
  • linux关闭sh
  • linux服务器搭建实战详解
  • win8怎么禁止开机启动项
  • fstab文件详解修改
  • iis安装步骤 windows server 2008
  • python中的json
  • unity 漫反射
  • Android使用活动需要去什么进行注册
  • android 自定义view onlayout
  • cocos2dx schedule
  • cocos2dx schedule
  • 解读JavaScript中 For, While与递归的用法
  • python代码视频
  • scp命令详解(全)
  • unity销毁预制体
  • express的中间件
  • 深入探讨近义词
  • android网络访问异常提示有哪些
  • [置顶] 安卓手机连接IP100蓝牙打印机实现打印功能
  • jQuery使用ajax跨域获取数据的简单实例
  • 四川省国家税务局电子税务局
  • 网络发票开票系统怎么设置?
  • 国家税务局湖南电子税务局登录
  • 济南高新区工商局政务大厅电话
  • 卖钢材交哪些税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设