哈希表的优点

哈希表

折半查找的时间复杂度:O(log2n)

哈希表是如何添加数据的

1.计算哈希码(调用hashCode(),结果是一个int值,整数的哈希码取自身即可)

2.计算在哈希表中的存储位置 y=k(x)=x%11

x:哈希码k(x)函数 y:在哈希表中的存储位置

3.存入哈希表

(1)情况1:一次添加成功

(2)情况2:多次添加成功(出现了冲突,调用equals()和对应链表的元素进行比较,比较到最后,结果都是false,创建新节点,存储数据,并加入链表末尾)

(3)情况3:不添加(出现了冲突,调用equals()和对应链表的元素进行比较,经过一次或者多次比较后,结构是true,表明重复,不添加)

哈希表添加数据 很快

唯一无序

hashCode和equals的作用

hashCode():计算哈希码,是一个整数,根据哈希码可以计算出数据在哈希表中的存储位置

equals():添加时出现了冲突,需要通过equals进行比较,判断是否相同,查询时也需要使用equals()进行比较,判断是否相同。

如何减少冲突

1)哈希表的长度和表中的记录数的比例:装填因子

如果Hash表的空间远远大于最后实际存储的记录个数,则造成了很大的空间浪费,如果选取小了的话,则容易造成冲突。在实际情况中,一般需要根据最终记录存储个数和关键字的分布特点来确定Hash表的大小。还有一种情况是可能事先不知道最终需要存储的记录个数,则需要动态维护Hash表的容量,此时可能需要重新计算Hash地址

装填因子越小,空间越大,发生冲突的可能性越小,java中取到0.75,超过0.75需要进行扩容

Map

HashMap

采用Hashtable哈希表存储结构

优点:添加速度快 查询速度快 删除速度快

缺点:无序

LinkedHashMap

采用哈希表存储结构,同时使用链表维护次序

key有序(添加顺序)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值