C语言实现HashMap

Hash,一般翻译音译为”哈希“的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。

简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

数据结构对比

  • 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;

    《C语言实现HashMap》 array.jpg

  • 链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。

    《C语言实现HashMap》 linker.png

  • Map是一种非常有用的数据结构。先为大家画一张简单的Map类族图。

《C语言实现HashMap》 MAP.jpg

上图表示,Map类族中主要实现类有Hashtable,HashMap,LinkedHashMap,TreeMap。在Hashtable子类中,还有Properties类的实现。

  • 哈希表,那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表。哈希表((Hash table)既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。

HashMap的数据结构就是结合了数组和链表来实现的一种Hash表

《C语言实现HashMap》 HashMaptable.png

参考资料:
各种字符串Hash函数比较
HashMap实现原理分析
HashMap
算法与数据结构(2),Map

    原文作者:燚随风
    原文地址: https://www.jianshu.com/p/df6c51fbf692
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞