iOS笔记-哈希表

什么是哈希表?

哈希表也叫散列表,是一个根据键(key)直接访问在内存存储位置的数据结构

通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这种方式加快了查找速度。而这个映射函数称作散列函数,存放记录的数组称作散列表

本质上来说是个数组,实现哈希表的两种方式:
  • 数组+链表
  • 数组+二叉树

一般数组里存放的是单一的数据,而哈希表中存放的是键值对

数据经过散列函数计算之后,放到特定的位置

entry就是键值对,只是不同的叫法

哈希冲突

数据经过散列函数计算之后,指定在同一个位置上,就是哈希冲突

处理哈希冲突
1.开放寻址法

当计算出来的位置已经有数据了,就顺着位置往后找没有数据的位置放数据

2.拉链法

在原来的entry中额外保存一个next指针,指向数组的另外一个位置放置新数据

哈希表的扩容

当哈希表被占用的位置比较多的时候,出险冲突的概率也就变高了,就会进行扩容

哈希表的扩容不是简单的扩大,而是新创建一个数组是原来的2倍,然后把原来数组的所有entry都重新经过新的哈希函数计算一边再存放到新的位置上

哈希表如何读取数据
  • 通过key利用哈希函数得出位置,然后去对应位置拿出数据,比较key,如果不对则根据next对比下一个位置的key
  • 开放寻址法则是按顺序去下一个位置对比

参考:一文搞定哈希表

你可能感兴趣的:(iOS笔记-哈希表)