哈希函数

关于哈希函数

  1. 哈希函数
    一种函数H,根据这个函数和查找关键字key,可以直接确定查找值所在位置,这个函数就是哈希函数,而哈希表是基于哈希函数建立的一种查找表
  2. 哈希冲突
    对应不同的关键字(数值)可能获得相同的hash地址
  3. 哈希冲突解决办法
    链地址法:为每个哈希值维护一个链表,并将具有相同哈希值的元素都放入这一链表当中。
    如下图
    在这里插入图片描述
    开放地址法:当发现哈希值 hh 处产生冲突时,根据某种策略,从 hh 出发找到下一个不冲突的位置。例如,一种最简单的策略是,不断地检查 h+1,h+2,h+3,\ldotsh+1,h+2,h+3,… 这些整数对应的位置。
    再哈希法:当发现哈希冲突后,使用另一个哈希函数产生一个新的地址。
  4. 扩容
    当哈希表元素过多时,冲突的概率将越来越大,而在哈希表中查询一个元素的效率也会越来越低。因此,需要开辟一块更大的空间,来缓解哈希表中发生的冲突。
  5. 创建哈希表,同时开辟链表
var MyHashSet = function() {
    // 创建哈希表,用时开辟链表
    this.BASE = 769;
    this.data = new Array(this.BASE).fill(0).map(() => new Array());

};

在这里在了解几个函数

  1. Array()
    Array 对象用于在单个的变量中存储多个值。
    语法:
    new Array();
    new Array(size);
    new Array(element0, element1, …, elementn);
    参数:
    参数 size 是期望的数组元素个数。返回的数组,length 字段将被设为 size 的值。
    参数 element …, elementn 是参数列表。当使用这些参数来调用构造函数 Array() 时,新创建的数组的元素就会被初始化为这些值。它的 length 字段也会被设置为参数的个数。
    返回值:
    返回新创建并被初始化了的数组。
    如果调用构造函数 Array() 时没有使用参数,那么返回的数组为空,length 字段为 0。
    当调用构造函数时只传递给它一个数字参数,该构造函数将返回具有指定个数、元素为 undefined 的数组。
    当其他参数调用 Array() 时,该构造函数将用参数指定的值初始化数组。
    当把构造函数作为函数调用,不使用 new 运算符时,它的行为与使用 new 运算符调用它时的行为完全一样。
    对象属性:
    constructor 返回对创建此对象的数组函数的引用。
    length 设置或返回数组中元素的数目。
    prototype 使您有能力向对象添加属性和方法。
    方法:
  2. map()
    定义用法:
    map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
    map() 方法按照原始数组元素顺序依次处理元素。
    注意: map() 不会对空数组进行检测。
    注意: map() 不会改变原始数组。
    语法:
    array.map(function(currentValue,index,arr), thisValue)

什么是哈希映射(HashMap)
HashMap,又称哈希映射或散列图。是一个用于储存键—值对(key-value)的集合,每个键—值对又称Entry,将这些Entry储存在一个数组里,这个数组就为HashMap。
在这里插入图片描述
一般初始的HashMap为空,如上图。
而HashMap最主要有两种方法:Put和Get方法。

  1. get方法
    Get方法就是通过Key的值来查找hashMap里相对应的数据
  2. put方法
    Put方法就是将任意数据插入到HashMap中

设置哈希映射
设计哈希映射与设计哈希集合解法接近,唯一的区别在于我们存储的不是key 本身,而是 (key,value) 对。除此之外,代码基本是类似的。

var MyHashMap = function() {
    this.BASE = 769;
    this.data = new Array(this.BASE).fill(0).map(() => new Array());
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值