CN114707023A - 一种哈希表遍历方法、系统、设备及计算机可读存储介质 - Google Patents
一种哈希表遍历方法、系统、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN114707023A CN114707023A CN202210188858.XA CN202210188858A CN114707023A CN 114707023 A CN114707023 A CN 114707023A CN 202210188858 A CN202210188858 A CN 202210188858A CN 114707023 A CN114707023 A CN 114707023A
- Authority
- CN
- China
- Prior art keywords
- traversal
- cursor
- hash table
- vernier
- hash
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 57
- 230000008569 process Effects 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 11
- 230000000875 corresponding effect Effects 0.000 description 26
- 238000004891 communication Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种哈希表遍历方法、系统、设备及计算机可读存储介质,获取目标哈希表;以二进制形式表示目标哈希表中每个哈希桶的游标;将0作为当前时刻的遍历游标;对当前时刻的遍历游标对应的哈希桶进行遍历;将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标;判断下一时刻的遍历游标是否为0,若否,则返回执行对当前时刻的遍历游标对应的哈希桶进行遍历的步骤;若是,则结束遍历。本申请中,基于二进制反向进位的方式生成哈希桶的游标,并据此对哈希表进行遍历,准确性高。本申请提供的一种哈希表遍历系统、设备及计算机可读存储介质也解决了相应技术问题。
Description
技术领域
本申请涉及哈希表技术领域,更具体地说,涉及一种哈希表遍历方法、系统、设备及计算机可读存储介质。
背景技术
在软件系统中,哈希表是一种支持快速查找、插入和删除操作的常见数据结构,这些操作的平均时间复杂度可以达到常数级。在哈希表的一般实现中,哈希表被组织成若干哈希桶形成的数组,每个哈希桶对应一个链表。插入操作时,首先通过哈希函数计算插入元素的哈希值,根据哈希值计算出哈希桶的索引,然后将其插入到哈希桶对应的链表中。查找过程也是先通过哈希函数得到查找元素的哈希桶索引,然后在其链表中查找。
对于一个具有m个哈希桶,存储了n个元素的哈希表,定义哈希表装载因子为n/m。随着哈希表的插入和删除,装载因子可能会变的很大或很小。装载因子过大,意味着过多的元素存储到同一个哈希桶中,这会影响查找效率;装载因子过小,意味着哈希桶利用率较低,造成空间浪费。因此,哈希表一般都有重哈希(Rehash)操作,即在装载因子过大的情况下,扩展哈希表,使用更多的哈希桶存储元素;装载因子过小时,收缩哈希表,使用更少的哈希桶节约空间。哈希表的Rehash过程一般较为耗时,如果一次性完成的话会影响程序运行效率,因此一般是将Rehash均摊到哈希表的查找、插入和删除操作过程中。
哈希表一般还需要支持遍历操作,以便对其中所有元素进行特定的操作,特定的操作一般比较耗时,所以遍历哈希表也是分多次进行的。哈希表处于稳定状态时,哈希表的遍历很简单。但是如果哈希表在遍历期间发生了Rehash,哈希表中的元素会重新分配哈希桶,很容易造成遍历时哈希桶被遗漏或者重复遍历的情况。
综上所述,如何准确对哈希表进行遍历是目前本领域技术人员亟待解决的问题。
发明内容
本申请的目的是提供一种哈希表遍历方法,其能在一定程度上解决如何准确对哈希表进行遍历的技术问题。本申请还提供了一种哈希表遍历系统、设备及计算机可读存储介质。
为了实现上述目的,本申请提供如下技术方案:
一种哈希表遍历方法,包括:
获取目标哈希表;
以二进制形式表示所述目标哈希表中每个哈希桶的游标;
将0作为当前时刻的遍历游标;
对当前时刻的遍历游标对应的所述哈希桶进行遍历;
将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标;
判断下一时刻的遍历游标是否为0,若否,则返回执行所述对当前时刻的遍历游标对应的所述哈希桶进行遍历的步骤;若是,则结束遍历。
优选的,所述对当前时刻的遍历游标对应的所述哈希桶进行遍历,包括:
对当前时刻的遍历游标对应的所述哈希桶进行遍历,并在遍历过程中判断所述目标哈希表是否发生Rehash;
若在遍历过程中所述目标哈希表发生Rehash,则以二进制形式更新Rehash后的所述目标哈希表中每个所述哈希桶的游标;
所述将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标,所述判断下一时刻的遍历游标是否为0之前,还包括:
按照保持遍历游标值不变的规则,基于所述哈希桶更新后的游标来更新下一时刻的遍历游标。
优选的,所述目标哈希表的大小为2n。
优选的,所述游标的位数为n。
一种哈希表遍历系统,包括:
第一获取模块,用于获取目标哈希表;
第一表示模块,用于以二进制形式表示所述目标哈希表中每个哈希桶的游标;
第一设置模块,用于将0作为当前时刻的遍历游标;
第一遍历模块,用于对当前时刻的遍历游标对应的所述哈希桶进行遍历;
第二设置模块,用于将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标;
第一判断模块,用于判断下一时刻的遍历游标是否为0,若否,则返回执行所述对当前时刻的遍历游标对应的所述哈希桶进行遍历的步骤;若是,则结束遍历。
优选的,所述第一遍历模块包括:
第一遍历单元,用于对当前时刻的遍历游标对应的所述哈希桶进行遍历,并在遍历过程中判断所述目标哈希表是否发生Rehash;若在遍历过程中所述目标哈希表发生Rehash,则以二进制形式更新Rehash后的所述目标哈希表中每个所述哈希桶的游标;
还包括:
第一设置单元,用于所述第二设置模块将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标,所述第一判断模块判断下一时刻的遍历游标是否为0之前,按照保持遍历游标值不变的规则,基于所述哈希桶更新后的游标来更新下一时刻的遍历游标。
优选的,所述目标哈希表的大小为2n。
优选的,所述游标的位数为n。
一种哈希表遍历设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上任一所述哈希表遍历方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时实现如上任一所述哈希表遍历方法的步骤。
本申请提供的一种哈希表遍历方法,获取目标哈希表;以二进制形式表示目标哈希表中每个哈希桶的游标;将0作为当前时刻的遍历游标;对当前时刻的遍历游标对应的哈希桶进行遍历;将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标;判断下一时刻的遍历游标是否为0,若否,则返回执行对当前时刻的遍历游标对应的哈希桶进行遍历的步骤;若是,则结束遍历。本申请中,基于二进制反向进位的方式生成哈希桶的游标,并据此对哈希表进行遍历,准确性高。本申请提供的一种哈希表遍历系统、设备及计算机可读存储介质也解决了相应技术问题。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种哈希表遍历方法的流程图;
图2为本申请实施例提供的一种哈希表遍历系统的结构示意图;
图3为本申请实施例提供的一种哈希表遍历设备的结构示意图;
图4为本申请实施例提供的一种哈希表遍历设备的另一结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参阅图1,图1为本申请实施例提供的一种哈希表遍历方法的流程图。
本申请实施例提供的一种哈希表遍历方法,可以包括以下步骤:
步骤S101:获取目标哈希表。
实际应用中,可以先获取目标哈希表,目标哈希表的类型及大小等可以根据实际需要确定。
步骤S102:以二进制形式表示目标哈希表中每个哈希桶的游标。
实际应用中,在获取目标哈希表之后,需以二进制形式表示目标哈希表中每个哈希桶的游标,以便后续基于哈希桶的游标对目标哈希表进行遍历。
具体应用场景中,本申请中的目标哈希表的大小可以为2n,相应的,游标的位数可以为n。相应的,哈希桶索引可以是hashkey&mask,其中hashkey表示通过哈希函数计算出的元素哈希值,mask为2的n次方减1。
步骤S103:将0作为当前时刻的遍历游标。
步骤S104:对当前时刻的遍历游标对应的哈希桶进行遍历。
实际应用中,在以二进制形式表示目标哈希表中每个哈希桶的游标之后,便可以将0作为当前时刻的遍历游标,并对当前时刻的遍历游标对应的哈希桶进行遍历来对目标哈希表开始遍历。
步骤S105:将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标。
实际应用中,在对当前时刻的遍历游标对应的哈希桶进行遍历之后,便可以将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,也即以反向二进制的方式来基于当前时刻的遍历游标生成下一时刻的遍历游标。
为了便于理解,假设目标哈希表大小为8,此时n为3,初始情况下游标为000,游标按照二进制反向进位的方法进行演变反向进位,因此,游标的演变过程就是000,100,010,110,001,101,011,111,000,如果遍历期间没有发生Rehash,则每次遍历都是以游标为索引遍历哈希桶,8次遍历后完成哈希表的遍历,期间没有哈希桶的遗漏和重复。相应的,假设目标哈希表大小为16,此时n为4,游标的演变过程就是0000,1000,0100,1100,0010,1010,0110,1110,0001,1001,0101,1101,0011,1011,0111,1111,0000。如果遍历期间没有发生Rehash,则16次遍历后完成哈希表的遍历,期间没有哈希桶的遗漏和重复。
步骤S106:判断下一时刻的遍历游标是否为0,若否,则返回执行步骤S104。
实际应用中,在将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标之后,便可以判断下一时刻的遍历游标是否为0,若为0,则表示已完成对目标哈希表的遍历,此时可以结束遍历,若不为0,则表示未完成对目标哈希表的遍历,此时需将下一时刻作为当前时刻来返回执行对当前时刻的遍历游标对应的哈希桶进行遍历及以后的操作。
具体应用场景中,在对当前时刻的遍历游标对应的哈希桶进行遍历的过程中,可以对当前时刻的遍历游标对应的哈希桶进行遍历,并在遍历过程中判断目标哈希表是否发生Rehash;若在遍历过程中目标哈希表发生Rehash,则以二进制形式更新Rehash后的目标哈希表中每个哈希桶的游标;
相应的,在将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标,判断下一时刻的遍历游标是否为0之前,还需按照保持遍历游标值不变的规则,基于哈希桶更新后的游标来更新下一时刻的遍历游标。
为了便于理解,假设目标哈希表大小从8扩展为16,则mask的值从111变为1111,同样的元素其哈希值保持不变,如果mask为111时计算得到的索引为abc,则mask扩展为1111后,计算得到的新索引值为0abc或1abc;假设Rehash之前已经遍历完游标为010的哈希桶,按照游标演变顺序下一个游标为110,如果下一次遍历前发生扩展,则原来110这个游标,在长度为16的情况下,就成了0110,因此开始遍历索引为0110的哈希桶中的节点;也即大小为8时,已经遍历过的游标分别是:000,100,010,哈希表长度扩展到16后,在这些索引的哈希桶中的节点,分布到新的哈希桶中,新哈希桶的索引将会是:0000,1000,0100,1100,0010,1010,而这些正好是将要遍历的0110之前的索引,从0110开始,按照长度为16的哈希表游标变化过程遍历下去,这样既不会漏掉节点,也不会遍历重复的节点。
相应的,在目标哈希表长度为16时,假设已经遍历完0100的游标,下一个游标为1100,如果此时哈希表长度缩小为8,1100这个游标,在长度为8的情况下,就成了100,因此开始遍历索引为100的哈希桶中的节点;也即在长度为16时,已经遍历过的游标是:0000,1000,0100,哈希表缩小后,这些索引的哈希桶中的节点,分布到新的哈希桶中的索引将会是:000和100,现在要从索引为100的哈希桶开始遍历,这样不会漏掉节点,但是之前长度为16时索引为0100中的节点会被重复遍历,然而,也就仅0100这一个哈希桶中的节点会重复而已,稳定性和健壮性均较好。
本申请提供的一种哈希表遍历方法,获取目标哈希表;以二进制形式表示目标哈希表中每个哈希桶的游标;将0作为当前时刻的遍历游标;对当前时刻的遍历游标对应的哈希桶进行遍历;将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标;判断下一时刻的遍历游标是否为0,若否,则返回执行对当前时刻的遍历游标对应的哈希桶进行遍历的步骤;若是,则结束遍历。本申请中,基于二进制反向进位的方式生成哈希桶的游标,并据此对哈希表进行遍历,准确性高。
为了便于理解本申请提供的哈希表遍历方法,现结合常规顺序演变游标的方法来对本方案进行说明:
假设目标哈希表大小为8,按照常规顺序,游标的演变过程是000,001,010,011,100,101,110,111,000;哈希表大小为16,游标的演变过程是0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111,0000;
在目标哈希表大小为8时,假设已经遍历完游标为010的哈希桶,下一个游标为011,如果遍历011之前,哈希表长度扩展成了16,011这个游标就成了0011;
假设在长度为8时,已经遍历过的游标是:000,001,010,哈希表长度扩展到16后,这些索引的哈希桶中的节点,分布到新的哈希桶的索引将会是:0000,1000,0001,1001,0010和1010。现在要开始遍历的游标为0011,而1000,1001,1010这些哈希桶中的节点在后续还是会遍历到,这就产生了较多的重复遍历;
而在哈希表缩小的情况下,哈希表长度为16时,遍历完0100的游标后,下一个游标为0101,此时长度缩小为8,0101这个游标就成了101;
在长度为16时,尚未遍历过的游标是:0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111。在哈希表长度缩小后,这些游标对应的元素分配到新的哈希桶中,索引将会是:000,001,010,011,100,101,110,111。现在要开始遍历的游标为101,那101之前的000,001,010,011,100这些游标就不会遍历了,这就发生了遗漏的情况;
因此,按照常规顺序遍历会发生哈希桶的遗漏,也可能会有较多的哈希桶被重复遍历。而本申请方案并不存在此种情况,保证了系统的稳定性、健壮性,提升了系统运行效率。
请参阅图2,图2为本申请实施例提供的一种哈希表遍历系统的结构示意图。
本申请实施例提供的一种哈希表遍历系统,可以包括:
第一获取模块101,用于获取目标哈希表;
第一表示模块102,用于以二进制形式表示目标哈希表中每个哈希桶的游标;
第一设置模块103,用于将0作为当前时刻的遍历游标;
第一遍历模块104,用于对当前时刻的遍历游标对应的哈希桶进行遍历;
第二设置模块105,用于将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标;
第一判断模块106,用于判断下一时刻的遍历游标是否为0,若否,则返回执行对当前时刻的遍历游标对应的哈希桶进行遍历的步骤;若是,则结束遍历。
本申请实施例提供的一种哈希表遍历系统,第一遍历模块包括:
第一遍历单元,用于对当前时刻的遍历游标对应的哈希桶进行遍历,并在遍历过程中判断目标哈希表是否发生Rehash;若在遍历过程中目标哈希表发生Rehash,则以二进制形式更新Rehash后的目标哈希表中每个哈希桶的游标;
还包括:
第一设置单元,用于第二设置模块将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标,第一判断模块判断下一时刻的遍历游标是否为0之前,按照保持遍历游标值不变的规则,基于哈希桶更新后的游标来更新下一时刻的遍历游标。
本申请实施例提供的一种哈希表遍历系统,目标哈希表的大小为2n。
本申请实施例提供的一种哈希表遍历系统,游标的位数为n。
本申请还提供了一种哈希表遍历设备及计算机可读存储介质,其均具有本申请实施例提供的一种哈希表遍历方法具有的对应效果。请参阅图3,图3为本申请实施例提供的一种哈希表遍历设备的结构示意图。
本申请实施例提供的一种哈希表遍历设备,包括存储器201和处理器202,存储器201中存储有计算机程序,处理器202执行计算机程序时实现如上任一实施例所描述哈希表遍历方法的步骤。
请参阅图4,本申请实施例提供的另一种哈希表遍历设备中还可以包括:与处理器202连接的输入端口203,用于传输外界输入的命令至处理器202;与处理器202连接的显示单元204,用于显示处理器202的处理结果至外界;与处理器202连接的通信模块205,用于实现哈希表遍历设备与外界的通信。显示单元204可以为显示面板、激光扫描使显示器等;通信模块205所采用的通信方式包括但不局限于移动高清链接技术(HML)、通用串行总线(USB)、高清多媒体接口(HDMI)、无线连接:无线保真技术(WiFi)、蓝牙通信技术、低功耗蓝牙通信技术、基于IEEE802.11s的通信技术。
本申请实施例提供的一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序被处理器执行时实现如上任一实施例所描述哈希表遍历方法的步骤。
本申请所涉及的计算机可读存储介质包括随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质。
本申请实施例提供的哈希表遍历系统、设备及计算机可读存储介质中相关部分的说明请参见本申请实施例提供的哈希表遍历方法中对应部分的详细说明,在此不再赘述。另外,本申请实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种哈希表遍历方法,其特征在于,包括:
获取目标哈希表;
以二进制形式表示所述目标哈希表中每个哈希桶的游标;
将0作为当前时刻的遍历游标;
对当前时刻的遍历游标对应的所述哈希桶进行遍历;
将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标;
判断下一时刻的遍历游标是否为0,若否,则返回执行所述对当前时刻的遍历游标对应的所述哈希桶进行遍历的步骤;若是,则结束遍历。
2.根据权利要求1所述的方法,其特征在于,所述对当前时刻的遍历游标对应的所述哈希桶进行遍历,包括:
对当前时刻的遍历游标对应的所述哈希桶进行遍历,并在遍历过程中判断所述目标哈希表是否发生Rehash;
若在遍历过程中所述目标哈希表发生Rehash,则以二进制形式更新Rehash后的所述目标哈希表中每个所述哈希桶的游标;
所述将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标,所述判断下一时刻的遍历游标是否为0之前,还包括:
按照保持遍历游标值不变的规则,基于所述哈希桶更新后的游标来更新下一时刻的遍历游标。
3.根据权利要求1所述的方法,其特征在于,所述目标哈希表的大小为2n。
4.根据权利要求3所述的方法,其特征在于,所述游标的位数为n。
5.一种哈希表遍历系统,其特征在于,包括:
第一获取模块,用于获取目标哈希表;
第一表示模块,用于以二进制形式表示所述目标哈希表中每个哈希桶的游标;
第一设置模块,用于将0作为当前时刻的遍历游标;
第一遍历模块,用于对当前时刻的遍历游标对应的所述哈希桶进行遍历;
第二设置模块,用于将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标;
第一判断模块,用于判断下一时刻的遍历游标是否为0,若否,则返回执行所述对当前时刻的遍历游标对应的所述哈希桶进行遍历的步骤;若是,则结束遍历。
6.根据权利要求5所述的系统,其特征在于,所述第一遍历模块包括:
第一遍历单元,用于对当前时刻的遍历游标对应的所述哈希桶进行遍历,并在遍历过程中判断所述目标哈希表是否发生Rehash;若在遍历过程中所述目标哈希表发生Rehash,则以二进制形式更新Rehash后的所述目标哈希表中每个所述哈希桶的游标;
还包括:
第一设置单元,用于所述第二设置模块将当前时刻的遍历游标的高位加一,并向当前时刻的遍历游标的低位进位,得到下一时刻的遍历游标,所述第一判断模块判断下一时刻的遍历游标是否为0之前,按照保持遍历游标值不变的规则,基于所述哈希桶更新后的游标来更新下一时刻的遍历游标。
7.根据权利要求5所述的系统,其特征在于,所述目标哈希表的大小为2n。
8.根据权利要求5所述的系统,其特征在于,所述游标的位数为n。
9.一种哈希表遍历设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至4任一项所述哈希表遍历方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至4任一项所述哈希表遍历方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210188858.XA CN114707023B (zh) | 2022-02-28 | 2022-02-28 | 一种哈希表遍历方法、系统、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210188858.XA CN114707023B (zh) | 2022-02-28 | 2022-02-28 | 一种哈希表遍历方法、系统、设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114707023A true CN114707023A (zh) | 2022-07-05 |
CN114707023B CN114707023B (zh) | 2024-01-23 |
Family
ID=82166408
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210188858.XA Active CN114707023B (zh) | 2022-02-28 | 2022-02-28 | 一种哈希表遍历方法、系统、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114707023B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107451271A (zh) * | 2017-08-03 | 2017-12-08 | 上海达梦数据库有限公司 | 一种哈希表处理方法、装置、设备及存储介质 |
CN109766341A (zh) * | 2018-12-27 | 2019-05-17 | 厦门市美亚柏科信息股份有限公司 | 一种建立哈希映射的方法、装置、存储介质 |
CN109885576A (zh) * | 2019-03-06 | 2019-06-14 | 珠海金山网络游戏科技有限公司 | 一种哈希表创建方法及系统、计算设备及存储介质 |
CN112463795A (zh) * | 2020-11-26 | 2021-03-09 | 杭州安恒信息技术股份有限公司 | 一种动态哈希方法、装置、设备及存储介质 |
CN112948642A (zh) * | 2021-03-30 | 2021-06-11 | 四川九洲电器集团有限责任公司 | 一种嵌入式哈希表及其操作方法、遍历方法和装置 |
-
2022
- 2022-02-28 CN CN202210188858.XA patent/CN114707023B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107451271A (zh) * | 2017-08-03 | 2017-12-08 | 上海达梦数据库有限公司 | 一种哈希表处理方法、装置、设备及存储介质 |
CN109766341A (zh) * | 2018-12-27 | 2019-05-17 | 厦门市美亚柏科信息股份有限公司 | 一种建立哈希映射的方法、装置、存储介质 |
CN109885576A (zh) * | 2019-03-06 | 2019-06-14 | 珠海金山网络游戏科技有限公司 | 一种哈希表创建方法及系统、计算设备及存储介质 |
CN112463795A (zh) * | 2020-11-26 | 2021-03-09 | 杭州安恒信息技术股份有限公司 | 一种动态哈希方法、装置、设备及存储介质 |
CN112948642A (zh) * | 2021-03-30 | 2021-06-11 | 四川九洲电器集团有限责任公司 | 一种嵌入式哈希表及其操作方法、遍历方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN114707023B (zh) | 2024-01-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110147204B (zh) | 一种元数据落盘方法、装置、系统及计算机可读存储介质 | |
CN109522271B (zh) | 一种b+树节点的批量插入和删除方法及装置 | |
CN109542911B (zh) | 一种元数据组织方法、系统、设备及计算机可读存储介质 | |
CN109213450B (zh) | 一种基于闪存阵列的关联元数据删除方法、装置及设备 | |
CN110647514A (zh) | 一种元数据更新方法、装置及元数据服务器 | |
CN110851206A (zh) | 一种车型配置文件拓展方法、装置、设备及可读存储介质 | |
CN111241071A (zh) | 一种数据迁移方法、系统、设备及计算机可读存储介质 | |
CN114707023B (zh) | 一种哈希表遍历方法、系统、设备及计算机可读存储介质 | |
CN111090397B (zh) | 一种数据重删方法、系统、设备及计算机可读存储介质 | |
CN113468080A (zh) | 一种全闪元数据的缓存方法、系统及相关装置 | |
CN109101191B (zh) | 数据存储方法、装置和存储介质以及电子设备 | |
CN110750496A (zh) | 一种文件拷贝方法、系统、设备及计算机可读存储介质 | |
CN115904813A (zh) | 文件备份方法、装置、设备及存储介质 | |
CN112765269B (zh) | 数据处理方法、装置、设备和存储介质 | |
CN112035380B (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
CN113010570B (zh) | 电网设备矢量数据查询方法、装置、计算机设备和介质 | |
CN111723246B (zh) | 一种数据处理的方法、装置和存储介质 | |
CN112380004A (zh) | 内存管理方法、装置、计算机可读存储介质及电子设备 | |
CN108874816B (zh) | 用于多个烧录设备的序号烧录方法及序号烧录系统 | |
CN110807092A (zh) | 数据处理方法及装置 | |
CN112068948A (zh) | 数据散列方法、可读存储介质和电子设备 | |
CN112084141A (zh) | 一种全文检索系统扩容方法、装置、设备及介质 | |
CN111104403B (zh) | 一种lsm树数据处理方法、系统、设备及计算机介质 | |
CN109992701B (zh) | 一种链表实现方法、装置、设备及可读存储介质 | |
CN114924674B (zh) | 一种多区域分栏导航交互方法、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |