zoukankan      html  css  js  c++  java
  • 关于lua table实现的一个问题

        脚本table中的元素在c中是分两个地方存放的,即数组与hash表。之前看了一些文章提到,如果key是数字的话,一般放在数组段,如果数字key非常离散,那就会对数字进行hash,然后再存到hash表中。但最近看了lua5.1的源码后发现不是这样的。

        如果一个table已经构造好,这时修改table的内容,不管key是何值,都会将key进行hash。

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

    t1 = 
    {
      [1] = 100,
      [2] = 200,
      [3] = 300,
    }


        只有构造table时不指定key值,这些value才会放在数组段。比如:

    t2 = {100, 200, 300}


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

        回到文章头,估计之前看的是5.1版本之前的实现,但感觉其实这样做不是更好吗?为什么5.1要改了呢?或者在table的生存期间还会动态调整各个value的位置吧。继续分析。

  • 相关阅读:
    Java 多态
    java final 关键字
    Java @Override 注解
    java 代理 agency
    java 构造器(constructor)
    打赏功能的实现
    博客园设置类似sublime高亮代码
    Ant教程
    github(其他类似github)下载到本地配置
    OSI七层与TCP/IP五层网络架构详解
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3093391.html
Copyright © 2011-2022 走看看