1.节点的结构(如下图)
(1)键值对--key是标识;value是存储的具体数据
(2)节点的子节点--存储的是具体的子节点
(3)节点的后节点--标记后一个节点
(4)节点的前节点--标记前一个节点
(5)节点的父节点--标记父节点是哪个
2.存储的规则
2.1存储第一条数据,并标记根节点和头结点。
2.2单个节点
2.2.1.没有超过设定的阶数
当存储第二和三个数据时,首先判断是否是最后一个结点或者要插入的键值对的键的值是否小于下一个结点的的键的最小值。如果是则再判断有没有超过设定的阶数,没有则将将数据直接插入到当前结点。当前的结点是最后一个结点并且没有超过设定的阶数,因此直接将二三个数据直接插入到当前的结点当中 。
2.2.2.超过阶数(分裂)
在存储第四个数时,首先判断是否是最后一个结点或者要插入的键值对的键的值是否小于下一个结点的的键的最小值。如果是再判断是否超过设定的阶数了,超过了则取出原来key-value 集合中间位置的下标mid并获得中间位置的键midKey。构造一个新的键值对midKeyAndValue存储(中间位置的键,空串),然后分别将中间位置的左边封装成集合对象leftKeyAndValue,并将左边的数存储到leftKeyAndValue中;中间位置的右边封装成集合对象rightKeyAndValue,再判断当前结点是否有叶子结点,如果有则将中间位置后的数据(不包含中间位置的数据)存储到rightKeyAndValue中;如果没有则将从中间位置开始右边的数据保存到rightKeyAndValue中。分别对左右两个集合对象进行排序处理。以mid为界限将当前结点分裂成两个结点分别是:前节点leftNode,后节点rightNode;前指针的节点的结构为:数据(leftKeyAndValue),子节点(null),前指针(当前节点的左节点),后指针(rightNode),父节点(当前结点的父节点);此时将头节点重置为前节点leftNode;新建一个子节点childNode并将前节点leftNode和后节点rightNode添加进去,然后构造一个父节点parentNode结构为:子节点(childNode),键值对(midKeyAndValue),前节点(null),后节点(null),父节点(null)。并将子节点与父节点进行关联。
2.3一夫二子
2.3.1.没有超过设定的阶数
存储第五个数的时候,
(1)以左子节点为依据进行判断,数值要是小于右子节点的第一个值,将数据存储到左子节点,并进行排序。
(2) 数值要是大于右子节点的的第一个值,则将数据存储到右子节点当中。
2.3.2超过设定的阶数
存储第六个数据的时候
(1)有百分之五十跟存储第五个数的过程一样。
(2)有百分之五十的可能性会超过阶数
2.4一夫三子
2.4.1 三个子节点的数,要么都满,要么部分满