您现在的位置是:首页 >

研究数据结构就是研究 从数据结构的角度分析 for each in 比 for in 快的多

火烧 2022-02-12 16:55:13 1052
从数据结构的角度分析 for each i 比 for i 快的多 今天仔细琢磨了会 从数据结构的角度分析了下 觉得for i 和for each i 效率上有着本质的区别 无论是JS还是AS   之

从数据结构的角度分析 for each in 比 for in 快的多  

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

  之前听说火狐的JS引擎支持for each in的语法 例如下述的代码

复制代码 代码如下: var arr = [ ]; for each(var k in arr) console log(k);

   即可直接遍历出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[ ]并非真正申请容纳一百万个元素的空间 而是把 转换成相应的哈希值 对应到很小一块储存空间里 从而节省了大量内存 例如有如下数组

复制代码 代码如下: var arr = [];   arr[ ] = ;   arr[ ] = ;   arr[ ] = ;   arr[ ] = ;   arr[ ] = ;

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

研究数据结构就是研究 从数据结构的角度分析 for each in 比 for in 快的多

  

  遍历时每次访问arr[k] 都要进行一次Hash(k)计算 根据散列表的容量取模 如果存在冲突还得寻找最终的值结果 如果支持for each in的语法 其内部的数据结构就决定了会快很多  

  

lishixinzhi/Article/program/Java/JSP/201311/19861  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码