算法学习(5)---------数据结构基础之散列表

散列表

      
一、概念
      散列表也被称作哈希表(hash table),这种数据结构对查询操作来说是很快的,它提供了键(key)和值(value)的映射关系,只要给出一个键(key),就能找到那个值,时间复杂度接近O(1)。
      有没有发现,散列表和数组很像,通过一个值去找另一个值,其实散列表就是利用了数组支持下标随机访问的特性,这样说来,散列表其实是可以看做数组的扩展,可以说,没有数组就没有散列表。       
二、散列函数(哈希函数)
      散列函数,我们把它定义成hash(key),其中key表示元素的键值,hash(key)的值表示经过散 列函数计算得到的散列值。
构造一个散列函数的条件:
1、散列函数计算得到的散列值是一个大于0的整数;
2、如果两个Key值相等,则散列值是相等的;反之不相等。       
三、散列表的操作
      (1)写入数据
      将新的键值对写入散列表。 但是当插入的数据越来越多,很容易发生 哈希冲突
      解决哈希冲突的两种方法:
      开放寻址法
      当一个位置被占用时,就去寻找下一个有空的位置。
      方法有:
      线性探测法:就是挨着挨着去查有没有空位,hash(key)+1.....。
      二次探测法:就是hash(key)+1^2,hash(key)+2^2.......这样
      双重散列:使用几个散列函数。
      链表法
在散列表中,每个桶会对应⼀条链表,所有散列值相同的元素都放到相同槽位对应的链表中,差不多就像分类格子一样,当有冲突时,放在链表中就可以。       (2)读取数据
      利用给定的key,找到value。
      (3)散列表扩容的条件
当散列表的当前长度(Capacity)和负载因子(LoadFactor)相乘<=hashMap.Size时该扩容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值