在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
简介: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插入空的位置 |
请发表评论