Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

手写跳表删除逻辑 bugfix #2336

Merged
merged 1 commit into from
Mar 23, 2024
Merged

手写跳表删除逻辑 bugfix #2336

merged 1 commit into from
Mar 23, 2024

Conversation

deanbear
Copy link
Contributor

@deanbear deanbear commented Mar 22, 2024

该 PR 修改点如下:
以下是修改后的表达及逻辑:

  1. 将变量名 "leveCount" 修改为 "levelCount"。

  2. 修改手写跳表中 delete 方法的逻辑。由于数组下标从 0 开始,因此在检查是否有一级索引为空时,应该使用 "levelCount - 1" 作为索引条件。这样可以确保在实际存在目标索引层级为空时,能正确减少层级计数,避免后续无法使用存在的高层级索引以及无法回收高层级孤儿索引的情况发生。

修改后的代码如下:

// 从最高级开始查看是否有一级索引为空,若为空则层级减1
while (levelCount > 1 && h.forwards[levelCount - 1] == null) {
    levelCount--;
}

这样可以确保正确处理跳表中的索引层级,避免出现索引层级计数错误以及无法使用或回收索引的问题。

@Snailclimb
Copy link
Owner

该 PR 修改点如下: 以下是修改后的表达及逻辑:

  1. 将变量名 "leveCount" 修改为 "levelCount"。
  2. 修改手写跳表中 delete 方法的逻辑。由于数组下标从 0 开始,因此在检查是否有一级索引为空时,应该使用 "levelCount - 1" 作为索引条件。这样可以确保在实际存在目标索引层级为空时,能正确减少层级计数,避免后续无法使用存在的高层级索引以及无法回收高层级孤儿索引的情况发生。

修改后的代码如下:

// 从最高级开始查看是否有一级索引为空,若为空则层级减1
while (levelCount > 1 && h.forwards[levelCount - 1] == null) {
    levelCount--;
}

这样可以确保正确处理跳表中的索引层级,避免出现索引层级计数错误以及无法使用或回收索引的问题。

感谢修正👍

@Snailclimb Snailclimb merged commit 8da9f9e into Snailclimb:main Mar 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants