README
Map
基本实现的方法
- set(key, val): 向Map中添加新元素
- get(key): 通过键值查找特定的数值并返回
- has(key): 判断Map对象中是否有Key所对应的值,有返回true,否则返回false
- delete(key): 通过键值从Map中移除对应的数据
- clear(): 将这个Map中的所有元素删除
至于以下方法虽然Map有但是在Set是时候写过了,区别不大就不在实现了
- keys():返回键名的遍历器
- values():返回键值的遍历器
- forEach():使用回调函数遍历每个成员
了解Map的底层-散列表+链表
Map是基于散列表(哈希表)来实现的,其他语言如Python的字典也都是通过散列表实现的。
- 需要建立一张散列表
- 采用除留余数法+链地址法解决冲突
- 链表直接使用之前封装的单链表
- 最后再把每一个散列地址用链表连接起来,能够用next按照插入顺序遍历,而不是地址顺序(未实现)
注意点
Map是传了一个二维数组,每一个子数组都是键值对的形式
const Map1 = new Map([['key1',1],['key2',2]])
建立hash的buckets(桶)时,填充链表注意引用的问题
// 建立子数组,也就是桶,用来装一个或多个键值对(冲突就是多个)
// 注意填充时不能直接fill(new LinkedList),这样其实只创建了一个链表,然后去填充,引用都是一样的
// 哈希表的桶数默认设为32
this.buckets = new Array(32).fill(null).map(()=>new LinkedList())