跳到主要内容

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())