• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

lua中的Table

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

简介:

Lua中,Table是很重要的一个部分,它可以表示很多的数据结构,可以是Array,可以是Map,可以根据自己的需要实现栈,队列等等,使用起来方便

分析:

Table分为2部分,分别是数组Array和Hash部分。

数组部分主要是存储下标从1开始的连续不为空的节点内容,如果是中间断开部分会存到hash部分。

Hash部分是存储各种类型的离散数据

 

对于一个Table初始化的时候,如果是空表,即Array和Hash部分长度都为0。

这里主要讲哈希的部分

然后根据哈希表的原理从后向前进行插入元素(开放定址法)

当哈希表的内存不够存储元素时,则申请元素,扩容的规则是每一次扩容翻倍,称为rehash

rehash的过程是:先分配一块新的内存块。然后,要把旧的迁移过来新内存块。但是,它并不是按顺序一个一个对位拷贝的,遍历每一个节点的时候,都要重新去进行一次哈希,所以分配前后的位置可能会不一样(它和Array部分不一样,Array部分是直接一对一,位置不变地拷贝的)

 

扩容前:

扩容后:

然后再在扩容后的位置去进行哈希

逻辑:

1:先去检查key所对应的哈希表位置是否为空,如果为空直接设置值

2:如果不为空,就在内存中找一个空的点,从最后往前找

3:如果找不到,则表示哈希表满了,调用一次rehash的方法,申请内存,并且重新设置一次之前的值

4:如果找到了,去计算该key点a本该存在的位置上的点b是否在其正确的位置上(即该点是否是通过开放定制法偏移过来的)

5:如果不是,则将b点放在空的结点位置去,a点放入计算好的位置上

6:如果b点在其正确的位置上,就将a插入空的位置

参考:https://blog.csdn.net/fwb330198372/article/details/88579361?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua--string发布时间:2022-07-22
下一篇:
Lua性能优化之table发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap