理解Lua中对字符串的处理方式,可以看到哈希表这种数据结构在实际开发中的作用;从而在开发的过程中对哈希加深理解和运用,顾名思义哈希,有从大的空间哈希到一个小的空间里,也有从小的空间哈希到一个很大的空间里,但在代数学的术语里就是映射,从大的空间映射到小的空间里,固然有可能碰到映射到一个位置上,所以产生了碰撞,处理的方法就是将碰撞的节点链接在一起。
1. 字符串哈希表存放的位置
字符串的哈希表是存放在global_State中,1
2
3
4
5
6
7
8
9
10typedef struct stringtable {
GCObject **hash;
lu_int32 nuse; /* number of elements */
int size;
} stringtable;
typedef struct global_State {
stringtable strt;
// ...
} global_State;
2. luaS_newlstr创建TString
luaS_是TString字符串相关的函数的前缀
luaS_newlstr函数创建TString字符串,而luaS_newlstr函数调用newlstr函数创建字符串。
1 | // 实际创建一个新的TString的主函数 |
3. 扩展字符串哈希表
1 | void luaS_resize (lua_State *L, int newsize) { |