散列表适合用于:
- 模拟映射关系; (域名跟IP地址,DNS域名解析器)
- 防止重复;
- 缓存/记住数据,以免服务器再通过处理来生成它们。
冲突
冲突:不同的键映射到数组的同一个位置。
处理冲突的方式 很多,最简单的办法如下:如果两个键映射到了同一个位置,就在这个位置存储一个链表。
两个经验教训
- 散列函数很重要。前面的散列函数将所有的键都映射到一个位置,而最理想的情况是, 散列函数将键均匀地映射到散列表的不同位置。
- 如果散列表存储的链表很长,散列表的速度将急剧下降。然而,如果使用的散列函数很 好,这些链表就不会很长!
性能
散列表中查找所花费的时间为常量时间。
散列表同数组和链表比较。
装填因子

散列表使用数组来存储数据,因此你需要计算数组中被占用的位置数。例如,下述散列表的 填装因子为2/5,即0.4。
填装因子度量的是散列表中有多少位置是空的。
填装因子越低,发生冲突的可能性越小, 散列表的性能越高。一个不错的经验规则是:一旦填装因子大于0.7,就调整散列表的长度。
可研究一下SHA函数,可将它用作散列函数
