哈希表疑惑
到现在还是对哈希表的存在很多疑问,老师你看我下面说的对吗?
哈希表 也是一个容器,用来存放数据的, 就和 map、set、数组、链表、树 一样。
哈希表 是将任何数据 通过 hash函数(hashcode) 变成一种可以尽量唯一表示的通用数据去保存,和序列化一样吗?
这小节的疑惑: 这里自己实现的hashTable 底层使用treeMap去保存数据,那为什么性能还会比TreeMap好呢? 按理说 hashTable 的 增删改查 又封装了 TreeMap, 也就是相比直接用treeMap 多做了一些事情,性能不应该比TreeMap还快啊。
正在回答
1
完全正确。
2
不对。哈希表不是在做序列化。hash 函数的目的,是让每一个元素有一个“标识”,通过这个标识,可以快速确定这个元素在哈希表这个容器的什么位置。
3
为什么哈希表会比 TreeMap 性能好?
因为如果单纯使用 TreeMap,100 万个元素,整个 TreeMap 里存了 100 万个元素,相应的,找到某一个元素的时间,是 log(1000000) = 20(这里忽略了常数)
但是,哈希表首先把空间分成了 M 份(假设是 10000),这样,存储 100 万个元素的话,每一个位置只存储 100 个元素,所以,每一个 TreeMap 只存了 100 个元素,那么在这 100 个元素中,找到某个元素的时间,是 log(100) = 7。而找到这个位置,是 O(1) 级别的。
但是,你说的非常对,这只是理论分析,实际上,哈希表的缺点也很明显。首先,是费空间;其次,有额外开销,比如计算哈希函数的过程等等。所以在实际应用中,不一定哈希表永远比红黑树强。但是,如果数据规模达到一定程度,同时空间允许,哈希表大概率是优于红黑树的。
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星