HashMap

hash算法:算出值的ASCII码值,然后进行取模或者位运算算出下标

取模是为了节省空间

Hash算法中使用取模操作可以节省空间的原因在于,取模操作可以很好地将哈希值映射到数组中的一个下标,从而实现了快速的查找和索引。假设我们要使用Hash表存储n个元素,直接使用哈希值作为下标存储会造成非常大的空间浪费,因为哈希值空间通常比实际存储的元素要大很多,而且哈希值可能出现冲突,导致很多桶没有被使用到。

而当我们使用取模操作时,可以把哈希值直接映射到一个较小的数组空间中,这样就可以很大程度上节省空间。具体来说,我们可以使用一个较小的数组来存储哈希值,然后对数组的长度取模,得到哈希值在数组中的下标。这样即使哈希值空间很大,也可以将其映射到一个较小的数组中,从而节省了存储空间。

另外,使用取模操作还可以提高Hash表的性能。因为取模操作可以将哈希值映射到一个具体的桶中,查找时只需要遍历该桶中的元素,不需要遍历整个HashTable,从而大大提高了查询的效率。

在hashmap中,进行位运算并且是16

HashMap中使用位运算进行哈希计算是因为位运算的计算速度通常比其他运算快,可以提高HashMap的性能。对于一个给定的key,HashMap会先将其进行哈希计算,将其转换成一个整数,然后再进行操作。

在进行哈希计算时,HashMap中默认使用的是简单的位运算,通过对key的每一个bit位进行异或操作,将其合并成一个哈希码。选取16作为哈希表长度的原因是,HashMap的底层数组长度总是2的整数次幂,而2的幂次方可以用位运算更高效地计算。此外,16也是一个比较适合的哈希表长度,可以充分利用内存,同时也能够避免过多的哈希冲突。

虽然使用位运算哈希码可以提高HashMap的性能,但是需要注意的是,如果key的分布不均匀,容易出现哈希冲突,这会影响HashMap的性能。因此,在设计HashMap时,需要合理选择哈希算法,并考虑使用其他方法避免哈希冲突的发生。

hash冲突

两个值通过hash计算后值相同

红黑树比链表查询的次数更少,解决查询慢的原因。

红黑树也有缺点:插入、删除慢,原因是红黑树会自己进行左旋、右旋

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值