lua中table的底层实现

lua中table的底层实现

table 在lua中是一个非常常用的数据结构,可以用来存放各种类型的元素,那么就会让人好奇,它这么强大,它是用什么数据结构实现的呢

首先,考虑 table = {1, 2, 3, 4, 5, 6, 7, 8} 这样的结构, 为了获得最快的访问速度,它是用数组实现的

那么如果执行table[10000] = 10; 莫非要创建10000个元素的数组,没有值的都存为nil,这样的空间利用效率太低无法接受,所有除了数组段之外,table还有一个哈希段,10000这个key会存在哈希段中,当太大的key值导致存储空间利用率低于50%时,这个值会被放进哈希段中。

此外,使用string或者0和负数做key时,key都是保存在哈希段。当table表满时,哈希段会扩大,所有段内的数据重新哈希。

lua的table使用数组和哈希表结合的方式,在空间效率和访问效率上都很好。

-- 创建一个以string作为key的table, 存储在哈希表中
tbTable = {["Monday"] = 1, ["Tuesday"] = 2, ["Wednesday"] = 3, ["Tursday"] = 4, ["Friday"] = 5, ["Saturday"] =  6, ["Sunday"] = 7};

-- 只能使用pairs遍历, 因为是用哈希算出存储位置,并非按照定义顺序存储
for k, v in pairs(tbTable) do
    print(k, v)
end

--[[ 一组输出结果
Tursday    4
Tuesday    2
Wednesday    3
Friday    5
Sunday    7
Saturday    6
Monday    1
]]--

-- 在表中插入一组数字, 这些数字会存入数组区域中
for i = 1, 10, 1 do
    table.insert(tbTable, i)
end

-- 可以使用ipairs将数组中的值遍历出来,不会访问到存在哈希表中的内容
for k, v in ipairs(tbTable) do
    print(k, v);
end

--[[输出结果
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10    10
]]--

此处有详解:https://blog.csdn.net/zr339361504/article/details/52432163

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值