mirror of
https://github.com/krahets/hello-algo.git
synced 2024-12-25 01:16:31 +08:00
Fix the code of hash map chaining.
This commit is contained in:
parent
55615ab61d
commit
6da6d24193
7 changed files with 79 additions and 61 deletions
|
@ -72,12 +72,13 @@ class HashMapChaining {
|
|||
public void remove(int key) {
|
||||
int index = hashFunc(key);
|
||||
// 遍历桶,从中删除键值对
|
||||
foreach (Pair pair in buckets[index].ToList()) {
|
||||
foreach (Pair pair in buckets[index].ToList()) {
|
||||
if (pair.key == key) {
|
||||
buckets[index].Remove(pair);
|
||||
size--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
size--;
|
||||
}
|
||||
|
||||
/* 扩容哈希表 */
|
||||
|
|
|
@ -78,8 +78,13 @@ class HashMapChaining {
|
|||
int index = hashFunc(key);
|
||||
List<Pair> bucket = buckets[index];
|
||||
// 遍历桶,从中删除键值对
|
||||
bucket.removeWhere((Pair pair) => pair.key == key);
|
||||
size--;
|
||||
for (Pair pair in bucket) {
|
||||
if (pair.key == key) {
|
||||
bucket.remove(pair);
|
||||
size--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 扩容哈希表 */
|
||||
|
|
62
codes/go/chapter_hashing/hash_collision_test.go
Normal file
62
codes/go/chapter_hashing/hash_collision_test.go
Normal file
|
@ -0,0 +1,62 @@
|
|||
// File: hash_collision_test.go
|
||||
// Created Time: 2022-12-14
|
||||
// Author: msk397 (machangxinq@gmail.com)
|
||||
|
||||
package chapter_hashing
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestHashMapChaining(t *testing.T) {
|
||||
/* 初始化哈希表 */
|
||||
hmap := newHashMapChaining()
|
||||
|
||||
/* 添加操作 */
|
||||
// 在哈希表中添加键值对 (key, value)
|
||||
hmap.put(12836, "小哈")
|
||||
hmap.put(15937, "小啰")
|
||||
hmap.put(16750, "小算")
|
||||
hmap.put(13276, "小法")
|
||||
hmap.put(10583, "小鸭")
|
||||
fmt.Println("\n添加完成后,哈希表为\nKey -> Value")
|
||||
hmap.print()
|
||||
|
||||
/* 查询操作 */
|
||||
// 向哈希表输入键 key ,得到值 value
|
||||
name := hmap.get(15937)
|
||||
fmt.Println("\n输入学号 15937 ,查询到姓名 ", name)
|
||||
|
||||
/* 删除操作 */
|
||||
// 在哈希表中删除键值对 (key, value)
|
||||
hmap.remove(12836)
|
||||
fmt.Println("\n删除 12836 后,哈希表为\nKey -> Value")
|
||||
hmap.print()
|
||||
}
|
||||
|
||||
func TestHashMapOpenAddressing(t *testing.T) {
|
||||
/* 初始化哈希表 */
|
||||
hmap := newHashMapOpenAddressing()
|
||||
|
||||
/* 添加操作 */
|
||||
// 在哈希表中添加键值对 (key, value)
|
||||
hmap.put(12836, "小哈")
|
||||
hmap.put(15937, "小啰")
|
||||
hmap.put(16750, "小算")
|
||||
hmap.put(13276, "小法")
|
||||
hmap.put(10583, "小鸭")
|
||||
fmt.Println("\n添加完成后,哈希表为\nKey -> Value")
|
||||
hmap.print()
|
||||
|
||||
/* 查询操作 */
|
||||
// 向哈希表输入键 key ,得到值 value
|
||||
name := hmap.get(13276)
|
||||
fmt.Println("\n输入学号 13276 ,查询到姓名 ", name)
|
||||
|
||||
/* 删除操作 */
|
||||
// 在哈希表中删除键值对 (key, value)
|
||||
hmap.remove(16750)
|
||||
fmt.Println("\n删除 16750 后,哈希表为\nKey -> Value")
|
||||
hmap.print()
|
||||
}
|
|
@ -89,10 +89,10 @@ func (m *hashMapChaining) remove(key int) {
|
|||
if p.key == key {
|
||||
// 切片删除
|
||||
m.buckets[idx] = append(m.buckets[idx][:i], m.buckets[idx][i+1:]...)
|
||||
m.size -= 1
|
||||
break
|
||||
}
|
||||
}
|
||||
m.size -= 1
|
||||
}
|
||||
|
||||
/* 扩容哈希表 */
|
||||
|
|
|
@ -12,7 +12,7 @@ import (
|
|||
. "github.com/krahets/hello-algo/pkg"
|
||||
)
|
||||
|
||||
func TestHashmap(t *testing.T) {
|
||||
func TestHashMap(t *testing.T) {
|
||||
/* 初始化哈希表 */
|
||||
hmap := make(map[int]string)
|
||||
|
||||
|
@ -55,58 +55,6 @@ func TestHashmap(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestHashMapChaining(t *testing.T) {
|
||||
/* 初始化哈希表 */
|
||||
hmap := newHashMapChaining()
|
||||
|
||||
/* 添加操作 */
|
||||
// 在哈希表中添加键值对 (key, value)
|
||||
hmap.put(12836, "小哈")
|
||||
hmap.put(15937, "小啰")
|
||||
hmap.put(16750, "小算")
|
||||
hmap.put(13276, "小法")
|
||||
hmap.put(10583, "小鸭")
|
||||
fmt.Println("\n添加完成后,哈希表为\nKey -> Value")
|
||||
hmap.print()
|
||||
|
||||
/* 查询操作 */
|
||||
// 向哈希表输入键 key ,得到值 value
|
||||
name := hmap.get(15937)
|
||||
fmt.Println("\n输入学号 15937 ,查询到姓名 ", name)
|
||||
|
||||
/* 删除操作 */
|
||||
// 在哈希表中删除键值对 (key, value)
|
||||
hmap.remove(12836)
|
||||
fmt.Println("\n删除 12836 后,哈希表为\nKey -> Value")
|
||||
hmap.print()
|
||||
}
|
||||
|
||||
func TestHashMapOpenAddressing(t *testing.T) {
|
||||
/* 初始化哈希表 */
|
||||
hmap := newHashMapOpenAddressing()
|
||||
|
||||
/* 添加操作 */
|
||||
// 在哈希表中添加键值对 (key, value)
|
||||
hmap.put(12836, "小哈")
|
||||
hmap.put(15937, "小啰")
|
||||
hmap.put(16750, "小算")
|
||||
hmap.put(13276, "小法")
|
||||
hmap.put(10583, "小鸭")
|
||||
fmt.Println("\n添加完成后,哈希表为\nKey -> Value")
|
||||
hmap.print()
|
||||
|
||||
/* 查询操作 */
|
||||
// 向哈希表输入键 key ,得到值 value
|
||||
name := hmap.get(13276)
|
||||
fmt.Println("\n输入学号 13276 ,查询到姓名 ", name)
|
||||
|
||||
/* 删除操作 */
|
||||
// 在哈希表中删除键值对 (key, value)
|
||||
hmap.remove(16750)
|
||||
fmt.Println("\n删除 16750 后,哈希表为\nKey -> Value")
|
||||
hmap.print()
|
||||
}
|
||||
|
||||
func TestSimpleHash(t *testing.T) {
|
||||
var hash int
|
||||
|
||||
|
|
|
@ -80,10 +80,12 @@ class HashMapChaining {
|
|||
List<Pair> bucket = buckets.get(index);
|
||||
// 遍历桶,从中删除键值对
|
||||
for (Pair pair : bucket) {
|
||||
if (pair.key == key)
|
||||
if (pair.key == key) {
|
||||
bucket.remove(pair);
|
||||
size--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
size--;
|
||||
}
|
||||
|
||||
/* 扩容哈希表 */
|
||||
|
|
|
@ -66,7 +66,7 @@ class HashMapChaining:
|
|||
if pair.key == key:
|
||||
bucket.remove(pair)
|
||||
self.size -= 1
|
||||
return
|
||||
break
|
||||
|
||||
def extend(self):
|
||||
"""扩容哈希表"""
|
||||
|
|
Loading…
Reference in a new issue