当前位置:   article > 正文

Hash全解(全网最全解)_hash解码

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

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/777419
推荐阅读
  

闽ICP备14008679号