Hash全解(全网最全解)


Hash是一种常见的数据结构或者说计算方法,以其O(1)的时间算法复杂度闻名于世。曾有人说,如果世界上只有一种数据结构,那么我选择hash,足见hash的地位及牛逼之处,而代码编写中hash也屡见不鲜,因为它实在是太常见太好用了
二 应用
关于java中hash的数据结构:
1.并发安全。

对这个需求,java中有了HashTable,为了进一步提升性能,于是有了使用分段锁的ConcurrentHashMap,亦不做赘述。

2.大数据hash。

传统的HashMap中除了key, value外,每个entry还要存16个byte的class header,4byte的hash值,以及8byte的指向下一个元素的指针,这样的结构在遇到大数据量时就会更加耗内存,更容易导致GC。
在这里插入图片描述
由对象头过大可以看出来,只要能够有一种结构消灭这个额外的entry对象,则此处将大大减少内存的消耗。

一种可行的方式是:采用二级索引保存的方式,第一级索引由Short2ShortMap保存一个short为key且short为value的Map结构,第二级索引则由许多数组构成,这些数组负责将被消灭value这个Object拆解为基本类型并用多个数组保存,而一级索引的value保存的value正是二级数组的index。通过这种变换,消灭了额外的entry对象从而大幅减少内存。需要注意的是,这种方式适用于使用了大量HashMap,但是每个Map内数据量较小的情况(受short的限制只有3w多index),如果每个Map内数据量也比较大,可以考虑Int2IntMap,当然,这样减少内存占用的效果就不如Short2ShortMap了。
在这里插入图片描述
3.其他。

ImmutableMap,Guava库,在初始化完毕后就没法再put做改变了。

SortedMap,Guava库,数据会按key做字母化排序。

BiMap,Guava库&#x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值