一种Queue容器的实现方法和装置制造方法及图纸

技术编号:28622424 阅读:15 留言:0更新日期:2021-05-28 16:18
本发明专利技术提供了一种Queue容器的实现方法和装置,该方法包括:创建预设基本数据类型的数组,将所述数组作为所述Queue容器的底层存储数据结构;对于使用所述Queue容器进行数据存储的任一基本数据类型,确定所述任一基本数据类型对应于所述预设基本数据类型的转换长度N;N为正整数;基于所述转换长度N,在所述Queue容器维护的所述数组中进行所述任一基本数据类型的数据的存储和读取。本发明专利技术能够减少内存资源浪费。

【技术实现步骤摘要】
一种Queue容器的实现方法和装置
本专利技术涉及计算机
,特别涉及一种队列(Queue)容器的实现方法和装置。
技术介绍
数据处理过程中经常需要使用Queue进行数据存储,Java中通常使用的Queue为JDK提供的LinkedBlockingQueue。JDK提供的LinkedBlockingQueue中,使用带头指针head和尾指针last的单链表实现,头指针head直接指向队头的第一个节点(Node)对象,尾指针last指向队尾的最后一个节点,其结构如图1所示,每个节点对象中包括两部分内容:指向数据位置的引用地址(指针)、指向下一节点的引用地址(指针),其中,指向数据位置的引用地址中存储的是数据对象,而数据对象中包括对象描述信息、value数据等信息。从图1可以看出,使用LinkedBlockingQueue进行数据存储时,每个value数据都需要使用一个节点对象和一个数据对象,而业务数据处理所针对的有效数据信息实际上只是value数据对象中的value数据,其它数据信息则与业务数据处理无关但是却额外占用了较多的内存空间。以int类型的value数据为例,当使用LinkedBlockingQueue进行存储时,value数据自身只占用4字节(byte),然而,与其存储相关的node对象中,两个引用地址共占用8字节,另外,与其相关的数据对象中的对象描述信息也要占用一定内存空间,可以看出,这些额外占用的内存空间比value数据本身占用的空间还要多很多。可以看出,现有LinkedBlockingQueue的实现中存在大量的内存资源浪费。
技术实现思路
有鉴于此,本专利技术的目的在于提供一种Queue容器的实现方法和装置,能够减少内存资源浪费。为了达到上述目的,本专利技术提供了如下技术方案:一种Queue容器的实现方法,包括:创建预设基本数据类型的数组,将所述数组作为所述Queue容器的底层存储数据结构;对于使用所述Queue容器进行数据存储的任一基本数据类型,确定所述任一基本数据类型对应于所述预设基本数据类型的转换长度N;N为正整数;基于所述转换长度N,在所述Queue容器维护的所述数组中进行所述任一基本数据类型的数据的存储和读取。一种Queue容器的实现装置,包括:创建单元,用于创建预设基本数据类型的数组,将所述数组作为所述Queue容器的底层存储数据结构;确定单元,用于对于使用所述Queue容器进行数据存储的任一基本数据类型,确定所述任一基本数据类型对应于所述预设基本数据类型的转换长度N;N为正整数;处理单元,用于基于所述转换长度N,在所述Queue容器维护的所述数组中进行所述任一基本数据类型的数据的存储和读取。一种电子设备,包括:至少一个处理器,以及与所述至少一个处理器通过总线相连的存储器;所述存储器存储有可被所述至少一个处理器执行的一个或多个计算机程序;所述至少一个处理器执行所述一个或多个计算机程序时实现上述Queue容器的实现方法中的步骤。一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个计算机程序,所述一个或多个计算机程序被处理器执行时实现上述Queue容器的实现方法中的步骤。由上面的技术方案可知,本专利技术中,以预设基本数据类型的数组作为Queue容器的底层存储数据结构,对于所述任一基本数据类型的数据的存储和读取,均基于所述任一基本数据类型对应于所述预设基本数据类型的转换长度在所述数组中进行,所述任一基本数据类型的数据不再以对象形式存储,因此不需要浪费额外的对象描述信息,另外,也不再采用包括指向数据位置的引用地址和指向下一节点的引用地址的节点对数据进行链式存储,也可以节省内存空间的占用。因此可以看出,应用本专利技术的方法实现的Queue容器,可以大大减少内存资源浪费。附图说明图1是现有技术LinkedBlockingQueue的数据结构示意图;图2是本专利技术实施例一Queue容器的实现方法流程图;图3是本专利技术实施例二Queue容器的实现方法流程图;图4是本专利技术实施例Queue容器中的底层存储数据结构示意图;图5是本专利技术实施例Queue容器中的数据存储示意图;图6是本专利技术实施例Queue容器中的数据读取示意图;图7是本专利技术实施例Queue容器的实现装置的结构示意图;图8是本专利技术实施例提供的电子设备的结构示意图。具体实施方式为了使本专利技术的目的、技术方案及优点更加清楚明白,下面结合附图并据实施例,对本专利技术的技术方案进行详细说明。在现有的计算机语言中,例如JAVA、C++等,都有基本数据类型的概念。本专利技术实施例中,针对与LinkedBlockingQueue的实现机制类似的、存在内存资源浪费的各类计算机语言提供的Queue容器进行改进,提出了一种利用该类计算机语言支持的基本数据类型实现的适用于该类计算机语言的新的Queue容器的实现方法。参见图2,图2是本专利技术实施例一Queue容器的实现方法流程图,如图2所示,该方法包括以下步骤:步骤201、创建预设基本数据类型的数组,将所述数组作为所述Queue容器的底层存储数据结构。本专利技术实施例中,所述基本数据类型根据实现Queue容器所采用的计算机语言的不同而不同。例如,采用JAVA语言实现Queue容器时,所述基本数据类型是指JAVA支持的所有基本数据类型(包括:byte、short、int、long、float、double、boolean、char共8种基本数据类型),而本步骤201中所述预设基本数据类型则可以是JAVA支持的以上8种基本数据类型中的任意一种。步骤202、对于使用所述Queue容器进行数据存储的任一基本数据类型,确定所述任一基本数据类型对应于所述预设基本数据类型的转换长度N;N为正整数。在实际应用中,不同的基本数据类型,其长度可能相同也可能不同,例如在JAVA中,byte、short、int、long、float、double、boolean、char的长度分别为:byte(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)、boolean(通常是4字节)、char(2字节)。本专利技术实施例中,由于所述预设基本数据类型和所述任一基本数据类型可能是不同的基本数据类型,使用所述Queue容器进行所述任一基本数据类型的数据存储时,需要先确定所述任一基本数据类型对应于所述预设基本数据类型的转换长度N,然后基于此长度N在所述Queue容器维护的所述数组中进行所述任一基本数据类型的数据的存储和读取,此长度N是根据所述任一基本数据类型的长度和所述预设基本数据类型的长度来确定的,后续会进行详细介绍。步骤203、基于所述转换长度N,在所述Queue容器维护的所述数组中进行所述任一基本数据类型的数据的存储和读取。本专利技术实施例中基于所述转换长度本文档来自技高网
...

【技术保护点】
1.一种Queue容器的实现方法,其特征在于,该方法包括:/n创建预设基本数据类型的数组,将所述数组作为所述Queue容器的底层存储数据结构;/n对于使用所述Queue容器进行数据存储的任一基本数据类型,确定所述任一基本数据类型对应于所述预设基本数据类型的转换长度N;N为正整数;/n基于所述转换长度N,在所述Queue容器维护的所述数组中进行所述任一基本数据类型的数据的存储和读取。/n

【技术特征摘要】
1.一种Queue容器的实现方法,其特征在于,该方法包括:
创建预设基本数据类型的数组,将所述数组作为所述Queue容器的底层存储数据结构;
对于使用所述Queue容器进行数据存储的任一基本数据类型,确定所述任一基本数据类型对应于所述预设基本数据类型的转换长度N;N为正整数;
基于所述转换长度N,在所述Queue容器维护的所述数组中进行所述任一基本数据类型的数据的存储和读取。


2.根据权利要求1所述的方法,其特征在于,
确定所述任一基本数据类型对应于所述预设基本数据类型的转换长度N的方法为:
计算所述任一基本数据类型的长度与所述预设基本数据类型的长度的商;
将所述商的向上取整结果确定为所述任一基本数据类型对应于所述预设基本数据类型的转换长度N。


3.根据权利要求1所述的方法,其特征在于,
所述Queue容器维护有尾指针;所述尾指针指向最后存入所述Queue容器维护的数组中的数据的结束位置;
基于所述转换长度N,在所述Queue容器维护的所述数组中进行所述任一基本数据类型的数据的存储,包括:
将待存储数据转换为N个所述预设基本数据类型的数据,从所述Queue容器维护的尾指针指向的所述数组中的位置开始顺序存入转换后的N个数据,并对所述Queue容器的尾指针指向所述数组中的位置进行更新。


4.根据权利要求1所述的方法,其特征在于,
所述Queue容器维护有头指针;所述头指针指向最先存入所述Queue容器维护的数组中的数据的起始位置;
基于所述转换长度N,在所述Queue容器维护的所述数组中进行所述任一基本数据类型的数据的读取,包括:
从所述Queue容器维护的头指针指向的所述数组中的位置开始顺序读取N个数组元素,将顺序读取的N个数据转换为所述任一基本数据类型的数据,并对所述Queue容器维护的头指针指向所述数组中的位置进行更新。


5.根据权利要求1所述的方法,其特征在于,该方法进一步包括:
当所述Queue容器维护的所述数组中存储的数组元素的个数超出所述数组的数组长度的预设比例,且所述数组的数组长度小于预设最大数组长度时,对所述数组的数组长度进行扩充;
基于扩充后的数组长度创建所述预设基本数据类型的新的数组;
将所述Queue容器维护的所述数组中的数据按照存入的先后顺序依次存入新的数组,并将所述Queue容器维护的头指针指向最先存入新的数组中的数据的起始位置,将所述Queue容器维护的尾指针指向最后存入新的数组中的数据的结束位置;
用新的数组取代所述Queue容器维护的所述数组作为所述Queue容器的底层存储数据结构,并删除所述Queue容器维护的所述数组。


6.根据权利要求1所述的方法,其特征在于,
所述预设基本数据类型为字节byte类型。


7.一种Queue容器的实现装置,其特征在于,该装置包括:
创建单元,用于创建预设基本数据类型的数组,将所述数组作为所述Queue容器的底层存储数据结构;
确定单元,用于对于使用所述Queue容器进行数据存储的任一基本数据类型,确定所述任一基本数据类型对应于所述...

【专利技术属性】
技术研发人员:张林
申请(专利权)人:北京京东振世信息技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1