码迷,mamicode.com
首页 > 其他好文 > 详细

散列表简介

时间:2016-05-29 16:41:47      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

散列表也叫哈希表,是一种根据关键字直接访问内存存储位置的数据结构,它是用一个数组实现的无序符号表.将键作为数组的索引而数组中键i处存储的就是它对应的值,这样就可以实现快速访问任意键的值.散列表是算法在时间和空间上做出权衡的经典例子.

技术分享

 

散列表的查找算法分为两步:

1.用散列函数将键转化为数组索引,可能会出现多个键散列到相同的索引值上面,这是就要进行第二步了.

2.处理碰撞冲突(拉链法和线性探测法).

 

 

散列函数的概念

严格地说每种类型的键都应该有对应的散列函数,

正整数: 一般用除留余数法,选择素数为M的数组,对于任意正整数k,计算k除以M的余数.可以有效的散布在0-M-1之间.如果M不是素数,可能不会均匀散布.

 

     技术分享

浮点数:java中将键表示为二进制然后使用除留取余法.

字符串:java中charAt()返回一个非负16位整数,只要R足够小,不造成溢出,那么结果就会落在0至M-1之间

技术分享
1 int hash = 0;
2 for (int i = 0; i < s.length(); i++)
3     hash = (R * hash + s.charAt(i)) % M;
View Code

 

 

软缓存

如果散列值的计算很耗时,我们可以将每个键的散列值缓存起来,即每个键中使用一个hash变量保存它的hasCode()的返回值。

 

 

基于拉链法的散列表

 

基于线性探测法的散列表

 

散列表简介

标签:

原文地址:http://www.cnblogs.com/tanxing/p/5538594.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!