diff --git a/codes/cpp/chapter_hashing/array_hash_map.cpp b/codes/cpp/chapter_hashing/array_hash_map.cpp new file mode 100644 index 000000000..394e36810 --- /dev/null +++ b/codes/cpp/chapter_hashing/array_hash_map.cpp @@ -0,0 +1,144 @@ +/* + * File: array_hash_map.cpp + * Created Time: 2022-12-14 + * Author: msk397 (machangxinq@gmail.com) + */ + +#include "../include/include.hpp" + +/* 键值对 int->String */ +struct Entry { +public: + int key; + string val; + Entry(int key, string val) { + this->key = key; + this->val = val; + } +}; + +/* 基于数组简易实现的哈希表 */ +class ArrayHashMap { +private: + vector bucket; +public: + ArrayHashMap() { + // 初始化一个长度为 100 的桶(数组) + bucket= vector(100); + } + + /* 哈希函数 */ + int hashFunc(int key) { + int index = key % 100; + return index; + } + + /* 查询操作 */ + string get(int key) { + int index = hashFunc(key); + Entry* pair = bucket[index]; + if (pair == nullptr) { + return "Not Found"; + } + return pair->val; + } + + /* 添加操作 */ + void put(int key, string val) { + Entry* pair = new Entry(key, val); + int index = hashFunc(key); + bucket[index] = pair; + } + + /* 删除操作 */ + void remove(int key) { + int index = hashFunc(key); + // 置为 nullptr ,代表删除 + bucket[index] = nullptr; + } + + /* 获取所有键值对 */ + vector entrySet() { + vector entrySet; + for (Entry* pair: bucket) { + if (pair != nullptr) { + entrySet.push_back(pair); + } + } + return entrySet; + } + + /* 获取所有键 */ + vector keySet() { + vector keySet; + for (Entry* pair: bucket) { + if (pair != nullptr) { + keySet.push_back(pair->key); + } + } + return keySet; + } + + /* 获取所有值 */ + vector valueSet() { + vector valueSet; + for (Entry* pair: bucket) { + if (pair != nullptr){ + valueSet.push_back(pair->val); + } + } + return valueSet; + } + + /* 打印哈希表 */ + void print() { + for (Entry* kv: entrySet()) { + cout << kv->key << " -> " << kv->val << endl; + } + } +}; + +/* Driver Code */ +int main() { + /* 初始化哈希表 */ + ArrayHashMap map = ArrayHashMap(); + + /* 添加操作 */ + // 在哈希表中添加键值对 (key, value) + map.put(12836, "小哈"); + map.put(15937, "小啰"); + map.put(16750, "小算"); + map.put(13276, "小法"); + map.put(10583, "小鸭"); + cout << "\n添加完成后,哈希表为\nKey -> Value" << endl; + map.print(); + + /* 查询操作 */ + // 向哈希表输入键 key ,得到值 value + string name = map.get(15937); + cout << "\n输入学号 15937 ,查询到姓名 " << name << endl; + + /* 删除操作 */ + // 在哈希表中删除键值对 (key, value) + map.remove(10583); + cout << "\n删除 10583 后,哈希表为\nKey -> Value" << endl; + map.print(); + + /* 遍历哈希表 */ + cout << "\n遍历键值对 Key->Value" << endl; + for (auto kv: map.entrySet()) { + cout << kv->key << " -> " << kv->val << endl; + } + + cout << "\n单独遍历键 Key" << endl; + for (auto key: map.keySet()) { + cout << key << endl; + } + + cout << "\n单独遍历值 Value" << endl; + for (auto val: map.valueSet()) { + cout << val << endl; + } + + return 0; +} diff --git a/codes/cpp/chapter_hashing/hash_map.cpp b/codes/cpp/chapter_hashing/hash_map.cpp new file mode 100644 index 000000000..898f679a0 --- /dev/null +++ b/codes/cpp/chapter_hashing/hash_map.cpp @@ -0,0 +1,53 @@ +/* + * File: hash_map.cpp + * Created Time: 2022-12-14 + * Author: msk397 (machangxinq@gmail.com) + */ + +#include "../include/include.hpp" + + +/* Driver Code */ +int main() { + /* 初始化哈希表 */ + unordered_map map; + + /* 添加操作 */ + // 在哈希表中添加键值对 (key, value) + map[12836] = "小哈"; + map[15937] = "小啰"; + map[16750] = "小算"; + map[13276] = "小法"; + map[10583] = "小鸭"; + cout << "\n添加完成后,哈希表为\nKey -> Value" << endl; + PrintUtil::printHashMap(map); + + /* 查询操作 */ + // 向哈希表输入键 key ,得到值 value + string name = map[15937]; + cout << "\n输入学号 15937 ,查询到姓名 " << name << endl; + + /* 删除操作 */ + // 在哈希表中删除键值对 (key, value) + map.erase(10583); + cout << "\n删除 10583 后,哈希表为\nKey -> Value" << endl; + PrintUtil::printHashMap(map); + + /* 遍历哈希表 */ + cout << "\n遍历键值对 Key->Value" << endl; + for (auto kv: map) { + cout << kv.first << " -> " << kv.second << endl; + } + + cout << "\n单独遍历键 Key" << endl; + for (auto key: map) { + cout << key.first << endl; + } + + cout << "\n单独遍历值 Value" << endl; + for (auto val: map) { + cout << val.second << endl; + } + + return 0; +} diff --git a/codes/cpp/include/PrintUtil.hpp b/codes/cpp/include/PrintUtil.hpp index 772eb9b25..544ee85db 100644 --- a/codes/cpp/include/PrintUtil.hpp +++ b/codes/cpp/include/PrintUtil.hpp @@ -1,7 +1,7 @@ /* * File: PrintUtil.hpp * Created Time: 2021-12-19 - * Author: Krahets (krahets@163.com) + * Author: Krahets (krahets@163.com), msk397 (machangxinq@gmail.com) */ #pragma once @@ -277,4 +277,19 @@ class PrintUtil { } cout << "[" + s.str() + "]" << '\n'; } + + /** + * @brief Print a HashMap + * + * @tparam TKey + * @tparam TValue + * @param map + */ + // 定义模板参数 TKey 和 TValue,用于指定键值对的类型 + template + static void printHashMap(unordered_map map) { + for (auto kv : map) { + cout << kv.first << " -> " << kv.second << '\n'; + } + } }; diff --git a/codes/go/chapter_hashing/array_hash_map.go b/codes/go/chapter_hashing/array_hash_map.go new file mode 100644 index 000000000..a962b6a4d --- /dev/null +++ b/codes/go/chapter_hashing/array_hash_map.go @@ -0,0 +1,96 @@ +// File: array_hash_map.go +// Created Time: 2022-12-14 +// Author: msk397 (machangxinq@gmail.com) + +package chapter_hashing + +import "fmt" + +/* 键值对 int->String */ +type Entry struct { + key int + val string +} + +/* 基于数组简易实现的哈希表 */ +type ArrayHashMap struct { + bucket []*Entry +} + +func newArrayHashMap() *ArrayHashMap { + // 初始化一个长度为 100 的桶(数组) + bucket := make([]*Entry, 100) + return &ArrayHashMap{bucket: bucket} +} + +/* 哈希函数 */ +func (a *ArrayHashMap) hashFunc(key int) int { + index := key % 100 + return index +} + +/* 查询操作 */ +func (a *ArrayHashMap) get(key int) string { + index := a.hashFunc(key) + pair := a.bucket[index] + if pair == nil { + return "Not Found" + } + return pair.val +} + +/* 添加操作 */ +func (a *ArrayHashMap) put(key int, val string) { + pair := &Entry{key: key, val: val} + index := a.hashFunc(key) + a.bucket[index] = pair +} + +/* 删除操作 */ +func (a *ArrayHashMap) remove(key int) { + index := a.hashFunc(key) + // 置为 nil ,代表删除 + a.bucket[index] = nil +} + +/* 获取所有键对 */ +func (a *ArrayHashMap) entrySet() []*Entry { + var pairs []*Entry + for _, pair := range a.bucket { + if pair != nil { + pairs = append(pairs, pair) + } + } + return pairs +} + +/* 获取所有键 */ +func (a *ArrayHashMap) keySet() []int { + var keys []int + for _, pair := range a.bucket { + if pair != nil { + keys = append(keys, pair.key) + } + } + return keys +} + +/* 获取所有值 */ +func (a *ArrayHashMap) valueSet() []string { + var values []string + for _, pair := range a.bucket { + if pair != nil { + values = append(values, pair.val) + } + } + return values +} + +/* 打印哈希表 */ +func (a *ArrayHashMap) print() { + for _, pair := range a.bucket { + if pair != nil { + fmt.Println(pair.key, "->", pair.val) + } + } +} diff --git a/codes/go/chapter_hashing/array_hash_map_test.go b/codes/go/chapter_hashing/array_hash_map_test.go new file mode 100644 index 000000000..6925f0d57 --- /dev/null +++ b/codes/go/chapter_hashing/array_hash_map_test.go @@ -0,0 +1,52 @@ +// File: array_hash_map_test.go +// Created Time: 2022-12-14 +// Author: msk397 (machangxinq@gmail.com) + +package chapter_hashing + +import ( + "fmt" + "testing" +) + +func TestArrayHashMap(t *testing.T) { + /* 初始化哈希表 */ + mapp := newArrayHashMap() + + /* 添加操作 */ + // 在哈希表中添加键值对 (key, value) + mapp.put(12836, "小哈") + mapp.put(15937, "小啰") + mapp.put(16750, "小算") + mapp.put(13276, "小法") + mapp.put(10583, "小鸭") + fmt.Println("\n添加完成后,哈希表为\nKey -> Value") + mapp.print() + + /* 查询操作 */ + // 向哈希表输入键 key ,得到值 value + name := mapp.get(15937) + fmt.Println("\n输入学号 15937 ,查询到姓名 " + name) + + /* 删除操作 */ + // 在哈希表中删除键值对 (key, value) + mapp.remove(10583) + fmt.Println("\n删除 10583 后,哈希表为\nKey -> Value") + mapp.print() + + /* 遍历哈希表 */ + fmt.Println("\n遍历键值对 Key->Value") + for _, kv := range mapp.entrySet() { + fmt.Println(kv.key, " -> ", kv.val) + } + + fmt.Println("\n单独遍历键 Key") + for _, key := range mapp.keySet() { + fmt.Println(key) + } + + fmt.Println("\n单独遍历值 Value") + for _, val := range mapp.valueSet() { + fmt.Println(val) + } +} diff --git a/codes/go/chapter_hashing/hash_map_test.go b/codes/go/chapter_hashing/hash_map_test.go new file mode 100644 index 000000000..c53d3991c --- /dev/null +++ b/codes/go/chapter_hashing/hash_map_test.go @@ -0,0 +1,55 @@ +// File: hash_map_test.go +// Created Time: 2022-12-14 +// Author: msk397 (machangxinq@gmail.com) + +package chapter_hashing + +import ( + "fmt" + "testing" + + . "github.com/krahets/hello-algo/pkg" +) + +func TestHashmap(t *testing.T) { + /* 初始化哈希表 */ + mapp := make(map[int]string) + + /* 添加操作 */ + // 在哈希表中添加键值对 (key, value) + mapp[12836] = "小哈" + mapp[15937] = "小啰" + mapp[16750] = "小算" + mapp[13276] = "小法" + mapp[10583] = "小鸭" + fmt.Println("\n添加完成后,哈希表为\nKey -> Value") + PrintMap(mapp) + + /* 查询操作 */ + // 向哈希表输入键 key ,得到值 value + name := mapp[15937] + fmt.Println("\n输入学号 15937 ,查询到姓名 ", name) + + /* 删除操作 */ + // 在哈希表中删除键值对 (key, value) + delete(mapp, 10583) + fmt.Println("\n删除 10583 后,哈希表为\nKey -> Value") + PrintMap(mapp) + + /* 遍历哈希表 */ + // 遍历键值对 key->value + fmt.Println("\n遍历键值对 Key->Value") + for key, value := range mapp { + fmt.Println(key, "->", value) + } + // 单独遍历键 key + fmt.Println("\n单独遍历键 Key") + for key := range mapp { + fmt.Println(key) + } + // 单独遍历值 value + fmt.Println("\n单独遍历值 Value") + for _, value := range mapp { + fmt.Println(value) + } +} diff --git a/codes/go/pkg/print_utils.go b/codes/go/pkg/print_utils.go index e42d40684..3d9b83a29 100644 --- a/codes/go/pkg/print_utils.go +++ b/codes/go/pkg/print_utils.go @@ -1,6 +1,6 @@ // File: print_utils.go // Created Time: 2022-12-03 -// Author: Reanon (793584285@qq.com), Krahets (krahets@163.com) +// Author: Reanon (793584285@qq.com), Krahets (krahets@163.com), msk397 (machangxinq@gmail.com) package pkg @@ -96,3 +96,10 @@ func showTrunk(t *trunk) { showTrunk(t.prev) fmt.Print(t.str) } + +// PrintMap Print a hash map +func PrintMap[K comparable, V any](m map[K]V) { + for key, value := range m { + fmt.Println(key, "->", value) + } +} \ No newline at end of file diff --git a/codes/java/chapter_hashing/array_hash_map.java b/codes/java/chapter_hashing/array_hash_map.java index 6dc26ba16..fb0073abd 100644 --- a/codes/java/chapter_hashing/array_hash_map.java +++ b/codes/java/chapter_hashing/array_hash_map.java @@ -21,7 +21,7 @@ class Entry { class ArrayHashMap { private List bucket; public ArrayHashMap() { - // 初始化一个长度为 10 的桶(数组) + // 初始化一个长度为 100 的桶(数组) bucket = new ArrayList<>(); for (int i = 0; i < 100; i++) { bucket.add(null); diff --git a/codes/python/chapter_hashing/array_hash_map.py b/codes/python/chapter_hashing/array_hash_map.py new file mode 100644 index 000000000..a65f1544b --- /dev/null +++ b/codes/python/chapter_hashing/array_hash_map.py @@ -0,0 +1,113 @@ +""" +File: array_hash_map.py +Created Time: 2022-12-14 +Author: msk397 (machangxinq@gmail.com) +""" + +""" 键值对 int->String """ +class Entry: + def __init__(self, key, val): + self.key = key + self.val = val + + +""" 基于数组简易实现的哈希表 """ +class ArrayHashMap: + def __init__(self): + # 初始化一个长度为 100 的桶(数组) + self.bucket = [None] * 100 + + """ 哈希函数 """ + def hashFunc(self, key): + index = key % 100 + return index + + """ 查询操作 """ + def get(self, key): + index = self.hashFunc(key) + pair = self.bucket[index] + if pair is None: + return None + return pair.val + + """ 添加操作 """ + def put(self, key, val): + pair = Entry(key, val) + index = self.hashFunc(key) + self.bucket[index] = pair + + """ 删除操作 """ + def remove(self, key): + index = self.hashFunc(key) + # 置为None,代表删除 + self.bucket[index] = None + + """ 获取所有键值对 """ + def entrySet(self): + result = [] + for pair in self.bucket: + if pair is not None: + result.append(pair) + return result + + """ 获取所有键 """ + def keySet(self): + result = [] + for pair in self.bucket: + if pair is not None: + result.append(pair.key) + return result + + """ 获取所有值 """ + def valueSet(self): + result = [] + for pair in self.bucket: + if pair is not None: + result.append(pair.val) + return result + + """ 打印哈希表 """ + def print(self): + for pair in self.bucket: + if pair is not None: + print(pair.key, "->", pair.val) + + +""" Driver Code """ +if __name__ == "__main__": + """ 初始化哈希表 """ + mapp = ArrayHashMap() + + """ 添加操作 """ + # 在哈希表中添加键值对 (key, value) + mapp.put(12836, "小哈") + mapp.put(15937, "小啰") + mapp.put(16750, "小算") + mapp.put(13276, "小法") + mapp.put(10583, "小鸭") + print("\n添加完成后,哈希表为\nKey -> Value") + mapp.print() + + """ 查询操作 """ + # 向哈希表输入键 key ,得到值 value + name = mapp.get(15937) + print("\n输入学号 15937 ,查询到姓名 " + name) + + """ 删除操作 """ + # 在哈希表中删除键值对 (key, value) + mapp.remove(10583) + print("\n删除 10583 后,哈希表为\nKey -> Value") + mapp.print() + + """ 遍历哈希表 """ + print("\n遍历键值对 Key->Value") + for pair in mapp.entrySet(): + print(pair.key, "->", pair.val) + + print("\n单独遍历键 Key") + for key in mapp.keySet(): + print(key) + + print("\n单独遍历值 Value") + for val in mapp.valueSet(): + print(val) diff --git a/codes/python/chapter_hashing/hash_map.py b/codes/python/chapter_hashing/hash_map.py new file mode 100644 index 000000000..f5db78633 --- /dev/null +++ b/codes/python/chapter_hashing/hash_map.py @@ -0,0 +1,49 @@ +""" +File: hash_map.py +Created Time: 2022-12-14 +Author: msk397 (machangxinq@gmail.com) +""" + +import sys, os.path as osp +sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__)))) +from include import * + + +""" Driver Code """ +if __name__ == "__main__": + """ 初始化哈希表 """ + mapp = {} + + """ 添加操作 """ + # 在哈希表中添加键值对 (key, value) + mapp[12836] = "小哈" + mapp[15937] = "小啰" + mapp[16750] = "小算" + mapp[13276] = "小法" + mapp[10583] = "小鸭" + print("\n添加完成后,哈希表为\nKey -> Value") + print_dict(mapp) + + """ 查询操作 """ + # 向哈希表输入键 key ,得到值 value + name = mapp[15937] + print("\n输入学号 15937 ,查询到姓名 " + name) + + """ 删除操作 """ + # 在哈希表中删除键值对 (key, value) + mapp.pop(10583) + print("\n删除 10583 后,哈希表为\nKey -> Value") + print_dict(mapp) + + """ 遍历哈希表 """ + print("\n遍历键值对 Key->Value") + for key, value in mapp.items(): + print(key, "->", value) + + print("\n单独遍历键 Key") + for key in mapp.keys(): + print(key) + + print("\n单独遍历值 Value") + for val in mapp.values(): + print(val) diff --git a/codes/python/include/__init__.py b/codes/python/include/__init__.py index 77cf855a5..31ed69ace 100644 --- a/codes/python/include/__init__.py +++ b/codes/python/include/__init__.py @@ -7,4 +7,4 @@ import collections from typing import List from .linked_list import ListNode, list_to_linked_list, linked_list_to_list, get_list_node from .binary_tree import TreeNode, list_to_tree, tree_to_list, get_tree_node -from .print_util import print_matrix, print_linked_list, print_tree \ No newline at end of file +from .print_util import print_matrix, print_linked_list, print_tree, print_dict \ No newline at end of file diff --git a/codes/python/include/print_util.py b/codes/python/include/print_util.py index f315add8d..f84d548b4 100644 --- a/codes/python/include/print_util.py +++ b/codes/python/include/print_util.py @@ -1,7 +1,7 @@ ''' File: print_util.py Created Time: 2021-12-11 -Author: Krahets (krahets@163.com) +Author: Krahets (krahets@163.com), msk397 (machangxinq@gmail.com) ''' import copy @@ -72,3 +72,12 @@ def print_tree(root, prev=None, isLeft=False): prev.str = prev_str trunk.str = ' |' print_tree(root.left, trunk, False) + +def print_dict(d): + """Print a dict + + Args: + d ([type]): [description] + """ + for key, value in d.items(): + print(key, '->', value) \ No newline at end of file diff --git a/docs/chapter_hashing/hash_map.md b/docs/chapter_hashing/hash_map.md index 74f63b884..3a53f5dba 100644 --- a/docs/chapter_hashing/hash_map.md +++ b/docs/chapter_hashing/hash_map.md @@ -63,19 +63,70 @@ comments: true === "C++" ```cpp title="hash_map.cpp" + /* 初始化哈希表 */ + unordered_map map; + /* 添加操作 */ + // 在哈希表中添加键值对 (key, value) + map[12836] = "小哈"; + map[15937] = "小啰"; + map[16750] = "小算"; + map[13276] = "小法"; + map[10583] = "小鸭"; + + /* 查询操作 */ + // 向哈希表输入键 key ,得到值 value + string name = map[15937]; + + /* 删除操作 */ + // 在哈希表中删除键值对 (key, value) + map.erase(10583); ``` === "Python" ```python title="hash_map.py" + """ 初始化哈希表 """ + mapp = {} + """ 添加操作 """ + # 在哈希表中添加键值对 (key, value) + mapp[12836] = "小哈" + mapp[15937] = "小啰" + mapp[16750] = "小算" + mapp[13276] = "小法" + mapp[10583] = "小鸭" + + """ 查询操作 """ + # 向哈希表输入键 key ,得到值 value + name = mapp[15937] + + """ 删除操作 """ + # 在哈希表中删除键值对 (key, value) + mapp.pop(10583) ``` === "Go" - ```go title="hash_map.go" + ```go title="hash_map_test.go" + /* 初始化哈希表 */ + mapp := make(map[int]string) + /* 添加操作 */ + // 在哈希表中添加键值对 (key, value) + mapp[12836] = "小哈" + mapp[15937] = "小啰" + mapp[16750] = "小算" + mapp[13276] = "小法" + mapp[10583] = "小鸭" + + /* 查询操作 */ + // 向哈希表输入键 key ,得到值 value + name := mapp[15937] + + /* 删除操作 */ + // 在哈希表中删除键值对 (key, value) + delete(mapp, 10583) ``` === "JavaScript" @@ -125,19 +176,52 @@ comments: true === "C++" ```cpp title="hash_map.cpp" - + /* 遍历哈希表 */ + // 遍历键值对 key->value + for (auto kv: map) { + cout << kv.first << " -> " << kv.second << endl; + } + // 单独遍历键 key + for (auto key: map) { + cout << key.first << endl; + } + // 单独遍历值 value + for (auto val: map) { + cout << val.second << endl; + } ``` === "Python" ```python title="hash_map.py" - + """ 遍历哈希表 """ + # 遍历键值对 key->value + for key, value in mapp.items(): + print(key, "->", value) + # 单独遍历键 key + for key in mapp.keys(): + print(key) + # 单独遍历值 value + for value in mapp.values(): + print(value) ``` === "Go" - ```go title="hash_map.go" - + ```go title="hash_map_test.go" + /* 遍历哈希表 */ + // 遍历键值对 key->value + for key, value := range mapp { + fmt.Println(key, "->", value) + } + // 单独遍历键 key + for key := range mapp { + fmt.Println(key) + } + // 单独遍历值 value + for _, value := range mapp { + fmt.Println(value) + } ``` === "JavaScript" @@ -242,19 +326,146 @@ $$ === "C++" ```cpp title="array_hash_map.cpp" + /* 键值对 int->String */ + struct Entry { + public: + int key; + string val; + Entry(int key, string val) { + this->key = key; + this->val = val; + } + }; + /* 基于数组简易实现的哈希表 */ + class ArrayHashMap { + private: + vector bucket; + public: + ArrayHashMap() { + // 初始化一个长度为 100 的桶(数组) + bucket= vector(100); + } + + /* 哈希函数 */ + int hashFunc(int key) { + int index = key % 100; + return index; + } + + /* 查询操作 */ + string get(int key) { + int index = hashFunc(key); + Entry* pair = bucket[index]; + return pair->val; + } + + /* 添加操作 */ + void put(int key, string val) { + Entry* pair = new Entry(key, val); + int index = hashFunc(key); + bucket[index] = pair; + } + + /* 删除操作 */ + void remove(int key) { + int index = hashFunc(key); + // 置为空字符,代表删除 + bucket[index] = nullptr; + } + }; ``` === "Python" ```python title="array_hash_map.py" - + """ 键值对 int->String """ + class Entry: + def __init__(self, key, val): + self.key = key + self.val = val + + """ 基于数组简易实现的哈希表 """ + class ArrayHashMap: + def __init__(self): + # 初始化一个长度为 100 的桶(数组) + self.bucket = [None] * 100 + + """ 哈希函数 """ + def hashFunc(self, key): + index = key % 100 + return index + + """ 查询操作 """ + def get(self, key): + index = self.hashFunc(key) + pair = self.bucket[index] + if pair is None: + return None + return pair.val + + """ 添加操作 """ + def put(self, key, val): + pair = Entry(key, val) + index = self.hashFunc(key) + self.bucket[index] = pair + + """ 删除操作 """ + def remove(self, key): + index = self.hashFunc(key) + # 置为空字符,代表删除 + self.bucket[index] = None ``` === "Go" ```go title="array_hash_map.go" + /* 键值对 int->String */ + type Entry struct { + key int + val string + } + /* 基于数组简易实现的哈希表 */ + type ArrayHashMap struct { + bucket []*Entry + } + + func newArrayHashMap() *ArrayHashMap { + // 初始化一个长度为 100 的桶(数组) + bucket := make([]*Entry, 100) + return &ArrayHashMap{bucket: bucket} + } + + /* 哈希函数 */ + func (a *ArrayHashMap) hashFunc(key int) int { + index := key % 100 + return index + } + + /* 查询操作 */ + func (a *ArrayHashMap) get(key int) string { + index := a.hashFunc(key) + pair := a.bucket[index] + if pair == nil { + return "Not Found" + } + return pair.val + } + + /* 添加操作 */ + func (a *ArrayHashMap) put(key int, val string) { + pair := &Entry{key: key, val: val} + index := a.hashFunc(key) + a.bucket[index] = pair + } + + /* 删除操作 */ + func (a *ArrayHashMap) remove(key int) { + index := a.hashFunc(key) + // 置为空字符,代表删除 + a.bucket[index] = nil + } ``` === "JavaScript"