一种在集合中添加数据的处理方法、 装置、 终端 【技术领域】
本发明属于计算机领域, 尤其涉及一种在集合中添加数据的处理方法、 装置、 终端。 背景技术 在计算机中, 常用集合创建数组来存储数据。其中, 集合为可变大小的序列, 而数 组则为固定大小的连续序列。当集合创建的数组的空间已用完, 不能再存储新增加的数据 时, 该集合将再创建一个比原数组的存储空间稍大的数组, 并先将原数组的所有数据都复 制到新的数组中再销毁原数组。如图 1 所示, 当集合中包括数据 “1” 、 “2” 、 “3” 、 “4” 时, 则 可以创建数组 101, 用于存储集合中的上述数据 “1” 、 “2” 、 “3” 、 “4” , 当向集合中再增加一个 数据, 如 “5” 时, 数组 101 已没有空间存储该数据 “5” , 此时, 需要再创建另一个数组 102, 并 将存于数组 101 的所有数据 “1” 、 “2” 、 “3” 、 “4” 都复制到新建的数组 102 的前端, 再继续在 数组 102 中添加新增的数据 “5” , 最后销毁数组 101。
现有技术中, 集合在创建新的数组时, 通常只创建存储空间比原数组的存储空间 稍大的数组。 若新创建的数组的存储空间不够大, 而又不断增加新的数据时, 集合将不断创 建新的数组, 并将原数组的所有数据都复制到新创建的数组中, 再销毁原数组, 从而大大降 低了系统性能 ; 若新创建的数据的存储空间过大, 在新增数据的数量很小时, 又浪费数组的 存储空间。
发明内容
本发明提供了一种在集合中添加数据的处理方法, 旨在解决集合在创建用于存储 新增数据的新数组时, 导致系统性能下降以及浪费数组存储空间的问题。
本发明是这样实现的, 一种在集合中添加数据的方法, 所述方法包括步骤 :
判断集合中第一数组的存储空间是否已满 ;
若所述第一数组的存储空间已满, 则创建链表节点, 所述链表节点包含指向所述 第一数组的指针和第二数组, 并将添加数据存储在所述第二数组中。
本发明的另一目的在于提供一种在集合中添加数据的处理装置, 所述装置包括 :
判断模块, 用于判断集合中第一数组的存储空间是否已满 ;
创建链表节点模块, 用于若所述第一数组的存储空间已满, 则创建链表节点, 所述 链表节点包含指向所述第一数组的指针和第二数组, 并将添加数据存储在所述第二数组 中。
本发明的另一目的在于提供一种包含上述在集合中添加数据的处理装置的终端。
本发明实施例, 创建的链表节点包含的指针仅占用 4 个字节的存储空间, 远小于 一般的数据占用的存储空间, 因此, 可以有效节省存储空间。此外, 使用链表节点包含的指 向集合中第一数组的指针查找该第一数组存储的数据代替复制第一数组的数据至创建的 第二数组的操作, 从而不需复制第一数组的所有数据至第二数组中, 也不需销毁第一数组,有效提高了系统的性能, 提高添加数据或访问数据的速度。 若创建的链表节点中, 指向第一 数组的指针在第二数组之前, 则后接收的数据存储在后创建的第二数组中, 保持第一数组 和第二数组的数据的连续性, 提高运行性能。 附图说明
图 1 是现有技术提供的集合创建用于存储新增数据的数组的流程 ;
图 2 是本发明第一实施例提供的在集合中添加数据的处理方法流程 ;
图 3 是本发明第二实施例提供的在集合中添加数据的处理方法流程 ;
图 4 是本发明第二实施例提供的第一数组和链表节点的结构 ;
图 5 是本发明第三实施例提供的在集合中添加数据的处理装置的结构。 具体实施方式
为了使本发明的目的、 技术方案及优点更加清楚明白, 以下结合附图及实施例, 对 本发明进行进一步详细说明。 应当理解, 此处所描述的具体实施例仅仅用以解释本发明, 并 不用于限定本发明。
本发明实施例在接收到新的数据且集合中第一数组的存储空间已满, 不能再存储 接收的新数据时, 创建一个链表节点, 该链表节点包含指向第一数组的指针和第二数组, 并 将接收的新数据存储在链表节点的第二数组中。
为了说明本发明所述的技术方案, 下面通过具体实施例来进行说明。
实施例一 : 图 2 示出了本发明第一实施例提供的在集合中添加数据的处理方法, 详述如下 :
为了更好地区分原数组和新创建的数组, 在本发明实施例中, 将原数组称为第一 数组, 将第一数组的存储空间已满后, 创建的链表节点包含的数组称为第二数组, 该第二数 组用于存储接收的新数据。
在步骤 S21 中, 判断集合中第一数组的存储空间是否已满, 若该第一数组的存储 空间已满, 转到步骤 S22, 若该第一数组的存储空间未满, 则转到步骤 S23 中。
其中, 判断集合中第一数组的存储空间是否已满的步骤具体为 : 判断集合中第一 数组的已用空间计数器变量值与该第一数组的存储空间值是否相等, 若相等, 证明该第一 数组的存储空间已满, 若不相等, 证明该第一数组的存储空间未满。
集合中包含一个当前数组已用空间大小的计数器变量, 每次向当前数组添加一个 数据后, 该计数器变量就累加一次, 当该计数器变量累加的值与表示当前数组的存储空间 的值相等时, 表示该当前数组的存储空间已满。
在步骤 S22 中, 创建链表节点, 该链表节点包含指向第一数组的指针和第二数组, 并将添加数据存储在该第二数组中。
若第一数组的存储空间已满, 则在集合中创建链表节点, 该创建的链表节点包含 指向第一数组的指针和第二数组, 并将接收的需要添加的数据存储在上述第二数组中。其 中, 在集合中创建的第二数组的存储空间可以与集合中第一数组的存储空间相同, 也可以 比第一数组的存储空间稍大, 或稍小, 此处不作限定。 在创建了包含第二数组和指向第一数 组的指针的链表节点之后, 将接收的新数据存储在该第二数组中。
假设 abcd 四个字母是数组的一个元素, 该元素将占用 2*4 = 8 个字节的存储空 间; 如果数组的 20 个元素若都包含 abcd 四个字母, 将占用 20*8 = 160 个字节的存储空间。 而链表节点包含的一个指针仅占用 4 个字节的存储空间, 远小于一般数据的存储空间, 因 此, 使用一个指针指向第一数组而不是将第一数组的数据复制到第二数组中, 将有效节省 第二数组的存储空间。
在本实施例中, 接收到需要添加的数据后, 判断集合中第一数组的存储空间是否 已满, 若该第一数组的存储空间已满, 则创建包含指向第一数组的指针和第二数组, 并将接 收的需要添加的数据添加到第二数组中。由于链表节点包含的指针仅占用 4 个字节的存储 空间, 远小于一般的数据占用的存储空间, 因此, 可以有效节省存储空间。 此外, 使用链表节 点包含的指针指向第一数组代替复制第一数组的数据至创建的第二数组, 从而不需复制第 一数组的所有数据至第二数组中, 也不需销毁第一数组, 有效提高了系统的性能, 提高添加 数据或访问数据的速度。
在步骤 S23 中, 将添加数据存储在第一数组中。
若第一数组的存储空间未满, 则将接收的数据继续存储在集合的第一数组中。
接收需要添加的新数据, 并判断集合中第一数组是否还有存储空间用于存储接收 的新数据, 若集合中第一数组存储空间的存储空间未满, 则该存储空间用于存储接收的新 数据 ; 若集合中第一数组已无存储空间用于存储接收的新数据, 集合将创建一个链表节点, 该链表节点包含指向第一数组的指针和第二数组。 作为本发明的另一个实施例, 链表节点包含的指向第一数组的指针在第二数组之 前。其中, 该链表节点的定义具体如下 :
private sealed class Pair
{
public T[] Array ;
public Pair Previous ;
} 创建的链表节点中, 指向第一数组的指针在第二数组之前, 若接收到新数据, 则将接收的新数据存储在第二数组上, 保证后接收的数据存储在后创建的第二数组中, 保 持第一数组和第二数组的数据的连续性, 提高运行性能。
实施例二 :
图 3 示出了本发明第二实施例提供的在集合中添加数据的处理方法流程, 本实施 例在创建链表节点之后, 若接收到查看第一数组的指令, 则根据链表节点中指向第一数组 的指针查找相应的数据。
其中, 在步骤 S31、 步骤 S32、 步骤 S33 与实施例一的步骤 S21、 步骤 S22、 步骤 S23 相同, 此处不再赘述。
在步骤 S34 中, 接收查看第一数组的数据的指令。
在步骤 S35 中, 根据链表节点中指向第一数组的指针查找第一数组的数据。
在用户需要访问集合中第一数组的数据时, 可根据链表节点包含的指向第一数组 的指针查找到存储在第一数组的相应数据。 如图 4 所示, 第一数组 41 存储的数据有 1, 2, 3, 4, 由于第一数组的存储空间已满, 在集合中创建一个链表节点 42, 该链表节点 42 包含一个 指向第一数组 41 的指针 421 和第二数组 422, 假设该指向第一数组 41 的指针 421 指向第
一数组 41 存储的第一个数据, 用户需要查看第一数组 41 存储的第二个数据, 则该指针 421 往后查找一位, 获得第一数组 41 存储的第二个数据。当然, 该链表节点 42 包含的指针 421 也可以指向第一数组 41 存储的最后一个数据, 此处不作限定。
在本发明第二实施例中, 在接收到查看第一数组数据的指令时, 根据链表节点包 含的指向第一数组的指针查找第一数组的数据, 快速查找查看的数据。
实施例三 :
图 5 示出了本发明第三实施例提供的在集合中添加数据的处理装置的结构, 为了 便于说明, 仅示出了与本发明第三实施例相关的部分。
该在集合中添加数据的处理装置可以是运行于终端内的软件单元、 硬件单元或者 软硬件相结合的单元, 也可以作为独立的挂件集成到这些终端中或者运行于这些终端的应 用系统中, 其中 :
判断模块 51 判断集合中第一数组的存储空间是否已满。
其中, 该判断模块 51 包括判断单元 511, 用于判断第一数组的已用空间计数器变 量值与第一数组的存储空间值是否相等。
在判断模块 51 判断出第一数组的存储空间已满时, 创建链表节点模块 52 创建链 表节点, 该链表节点包含指向第一数组的指针和第二数组, 并将添加的数据存储在上述第 二数组中。
根据链表节点包含的指向集合中第一数组的指针, 可以查找到集合中第一数组的 数据。
本发明第三实施例中, 由于创建链表节点模块 52 创建的链表节点包含指向第一 数组的指针仅占用 4 个字节的存储空间, 远小于一般的数据占用的存储空间, 因此, 可以有 效节省存储空间。此外, 使用该链表节点包含的指向第一数组的指针查找第一数组存储的 数据代替复制第一数组的数据至创建的第二数组, 不需复制第一数组的所有数据至第二数 组中, 也不需销毁第一数组, 有效提高了系统的性能, 提高添加数据或访问数据的速度。
在判断模块 51 判断出第一数组的存储空间未满时, 第一数组添加模块 53 将添加 数据存储在第一数组中。
作为本发明的另一个实施例, 该在集合中添加数据的处理装置还包括 : 接收指令 模块 54 和查找模块 55。该接收指令模块 54 接收查看第一数组的数据的指令 ; 在接收到查 看第一数组的数据的指令后, 查找模块 55 根据链表节点中指向第一数组的指针查找第一 数组的数据。
本发明实施例, 在集合中第一数组的存储空间已满, 不能再存储接收的新数据时, 创建一个链表节点, 该链表节点包含指向第一数组的指针和第二数组, 并将接收的新数据 存储在第二数组中。由于链表节点包含的指针仅占用 4 个字节的存储空间, 远小于一般的 数据占用的存储空间, 因此, 可以有效节省存储空间。此外, 使用链表节点包含的指向集合 中第一数组的指针查找该第一数组存储的数据代替复制第一数组的数据至创建的第二数 组的操作, 从而不需复制第一数组的所有数据至第二数组中, 也不需销毁第一数组, 有效提 高了系统的性能, 提高添加数据或访问数据的速度。 若创建的链表节点中, 指向第一数组的 指针在第二数组之前, 则后接收的数据存储在后创建的第二数组中, 保持第一数组和第二 数组的数据的连续性, 提高运行性能。以上所述仅为本发明的较佳实施例而已, 并不用以限制本发明, 凡在本发明的精 神和原则之内所作的任何修改、 等同替换和改进等, 均应包含在本发明的保护范围之内。