C语言实现HashMap

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

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

数据结构对比

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


    C语言实现HashMap_第1张图片
    array.jpg
  • 链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。


    C语言实现HashMap_第2张图片
    linker.png
  • Map是一种非常有用的数据结构。先为大家画一张简单的Map类族图。

C语言实现HashMap_第3张图片
MAP.jpg

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

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

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

C语言实现HashMap_第4张图片
HashMaptable.png

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

你可能感兴趣的:(C语言实现HashMap)