打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于lua table的实现
分类: LUA 2013-05-22 18:41 560人阅读 评论(0) 收藏 举报

    以下内容只作本人学习笔记,内容会随着我对lua源码分析的深入慢慢修改,所以以下内容只作参考,并非100%正确。

    脚本table中的元素在c中是分两个地方存放的,即数组与hash表。table中元素的位置也不是一直固定的,它会根据table被修改的情况动态改变。下面分两种情况说一下table的特点。

    第一,先来看构造table时lua是怎么处理的。

    如果构造table的时候指定了key的值,不管key是何值,也会将key进行hash。比如:

  1. t1 =   
  2. {  
  3.   [1] = 100,  
  4.   [2] = 200,  
  5.   [3] = 300,  
  6. }  

    只有构造table时不指定key值,这些value才会放在数组段。比如:
  1. t2 = {100, 200, 300}  


   所以, 用这两种不同的构造方式构造的table的访问效率是不一样的。不过实际应用中,像这样手动构造的table一般不会很大,所以遍历的的消耗也不会相差太远。

    第二,来看一下对table的修改会产生什么样的行为。

    如果向table插入一个以字符串,table,userdata,函数,0或负数为key的值时,都会将key进行hash,然后将其放到hash表中。

    如果向table插入一个以正整数为key的值时,如果key的值大于2的26次方,那也会将其放入hash表中,否则,lua会用一个算法来判断这个key在数组中的位置是否过于离散,如果是,则将其放入hash表中,否则将其放入数组段中。

    上面只是说了个大概,还有很多细节没有说到,比如在插入前会先判断是否有空位,有就直接插入,没有就会对数组和hash表进行调整后再插入。

    继续分析。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
HashMap源码剖析
HashMap源码分析-jdk1.6和jdk1.8的区别【面试+工作】
集合系列—HashMap源码分析
[LUA学习笔记04]Lua语法(转)
Java 8 中 HashMap 到底有啥不同?
HashMap解决hash冲突的方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服