位置: 编程技术 - 正文

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

  • 分成收入计入什么科目
  • 国际避税地是什么
  • 劳务公司收到劳务费怎么做账
  • 生产经营年度汇缴申报时间
  • 安装费发票备注栏怎么填
  • 报销招待费事由有哪些
  • 资产收购应如何计算
  • 财务报表实收资本
  • 发出库存商品没发货
  • 月末计算各种税费表格模版
  • 什么时候计提资本成本
  • 社会保险与个人养老金的区别
  • 出口退税账务处理例题
  • 私立幼儿园需要转学籍吗
  • 银行利息收入要开发票吗
  • 电子发票详见清单怎么开
  • 快递公司需要交税吗
  • 工会筹备金交给谁
  • 增资印花税增加哪个税目
  • 库存现金进行清查
  • 财务费用为负数怎么结转
  • 出差补贴算工资薪金吗
  • linux文件夹怎么删除
  • 货物无偿赠送分录
  • dghm.exe是什么程序
  • 工程投标保证金一般是多少
  • 如何做好税收风险管理工作
  • 增值税发票选择确认平台注意事项
  • 车辆购买保险发票未回怎么做会计分录
  • element-ui dialog
  • 太平鸟的翅膀上有几道红羽毛
  • 合并报表内部交易顺流逆流
  • php数组可以使用哪些键名
  • 善意取得虚开增值税专用发票处理
  • 结转已销售产品的实际生产成本会计分录
  • 应收账款和应付账款怎么对冲
  • cakephp菜鸟教程
  • php输出mysql查询结果
  • 定期定额和核定征收哪个好
  • 搅拌机属于哪类税收
  • 帝国cms伪静态规则
  • 其他应付款在清算时怎么处理
  • 私募基金成立备案流程
  • 库存现金怎么算
  • 百万级别数据库mysql
  • 基建拨款在新政府会计制度对应什么科目
  • 赠品要做视同销售申报纳税吗?
  • 营改增后税率
  • 冲去年管理费用
  • 个体工商户不缴纳印花税吗
  • 基本户打款个人怎么办
  • 支付贷款利息的现金流量怎么指定?
  • 测距仪计入什么科目
  • 权益性投资包括哪些
  • 初次建账应准备哪几种会计本
  • 账务处理程序和财务处理程序
  • eclipse连接mysql代码
  • linux下mysql5.7.19(tar.gz)安装图文教程
  • mysql 大数据处理
  • freebsd软件安装
  • 通过修改注册表修改edge主页
  • 创建windows
  • linux的ps命令用法
  • rapapp.exe - rapapp是什么进程 有何作用
  • 使用windows管理无线
  • win10开机提示xwz
  • opencvsharp读取图片
  • layer关闭当前窗口
  • js代码运行机制
  • linux命令scp和sftp详细介绍
  • scp命令详解(全)
  • 响应鼠标变换表怎么用
  • jquery技巧
  • python目录文件拼接
  • JavaScript bold方法入门实例(把指定文字显示为粗体)
  • 稽查查补税款享受增值税免税优惠吗
  • 青岛地方税务局第三分局局长
  • 上海市浦东新区人民医院
  • 钟楼在西安的哪里
  • 税务稽查问题应对心得
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设