一、概述
在日常的数据库操作中,我们很经常用到如下操作:
select t1.*, t2.* from t1, t2 where t1.id = t2.id
这是一个显式的表连接操作,目的就是关联2张表,取出主键能够相互匹配的记录,
实现这类运算的算法通常有2中,HASH连接和排序连接.其中又以HASH连接的使用最为频繁.
HASH连接是利用HASH算法能够将KEY键映射到一个唯一值,使得所有KEY键相同的映射的结果相同,而KEY键不同的会映射到不同的结果上,来实现连接操作.
二、应用
我们有一个联系人列表,我们称它为原始联系人列表,用oriContactList 表示。
然后我们将这个列表做一个新增和删除的操作,得到一个新的联系人列表,用curContactList表示。
现在我们需要将这2个列表做一个对比操作,找出2个列表中没有变动的(既存在与oriContancListt中也存在与curContactList中)一个人员列表。
在传统的实现中,我们会考虑写一个双重循环,如:
比如oriContanctList 的大小是M, curContanctList 的大小是N 那么这个执行时间就是M*N
我们也可以用HASH算法来实现这个需求:
我们先使用1个HASHMAP来存放oriContanctList,我们把这个MAP命名为oriContanctMap
如果oriContanctList 的大小是M, curContanctList 的大小是N, 将oriContanctList放入HASHMAP需要M次运算 迭代curContanctList 需要N次运算,因为HASH算法本身需要的是常量时间,在运算量计算中可以忽略,那么这个算法需要的运算时间是 M+N
三、总结
HASH算法是个简单实用的算法,应用得当可以使程序逻辑更加清晰,高效.
除了用来做表连接的操作之外,HASH算法还可以用来做唯一值操作,分组。有兴趣研究的朋友的联系我的邮箱 jlr_6@foxmail.com