1、 引言

上节我们学习了散列表的定义,并用代码演示了散列表的实现。众所周知,散列表的用途广泛,那么今天学习散列表的具体应用都有哪些,今天给出三个应用实例供大家参考。

2、 应用案例

  • 散列表用于查找

我们手机上都有基本的通讯功能,有通讯功能必然存在一个通讯录的东西,一般情况下,

我们的通讯录都是单人单号,但有时因为特殊原因,有人有多个号码,但是也加了区分的限定,在此我们只研究单人单号的情况。

假设我们需要创建一个类似于上图的通讯录,输入姓名就能映射出电话号码,那我们通讯就会很方便。这非常适合使用散列表的数据结构来实现,首先我们先创建映射,再实现查找。

下面是一段C#代码(Java类似于Map用法)

staticvoid Main(string[] args)

{

//定义通讯录字典

Dictionary dics = newDictionary();

//添加通讯数据

dics.Add("Bob", "1238292311123");

dics.Add("Cob", "1238292311123");

dics.Add("Dob", "1238292311123");

dics.Add("Eob", "1238292311123");

dics.Add("Fob", "1238292311123");

//循环赋值

foreach (var item in dics)

{

Console.WriteLine("嘿,siri,帮我查询一下" + item.Key + "的电话。");

Console.WriteLine("正在查询,请稍候:");

Console.WriteLine(item.Key + "的电话为" + item.Value);

Console.WriteLine("请按任意键继续查询~");

Console.ReadLine();

}

Console.ReadKey();

}

输出结果为:

打开网易新闻 查看更多图片

运行结果

是不是查的又准又快~

  • 投票——防止重复投票

如果我们负责一个投票的事务,规定每人只能投一票,但如何避免重复投票,显然散列表满足这种唯一映射。那么我们应该怎么实现这一过程呢,下面再给你写一段代码:

staticvoid Main(string[] args)

{

//定义一个投票人字典

Dictionary dicVotes = newDictionary();

dicVotes.Add("tom", true);

dicVotes.Add("som", true);

dicVotes.Add("rom", true);

//一直循环

while (true)

{

Console.WriteLine("请输入姓名进行投票:");

//接收用户输入

string input = Console.ReadLine();

foreach (var item in dicVotes)

{

if(input.Equals(item.Key))

{

Console.WriteLine("您已投过票了,滚出去~");

break;

}

else

{

Console.WriteLine("投票成功~");

break;

}

}

}

}

打开网易新闻 查看更多图片

运行结果

从运行结果上来看,如果tom在散列表中,对比用户输入存在就返回已投票,当输入“yh”时,散列表中并不存在这么一个人,显示投票成功,最完美的情况,就是应该再将这个人加入散列表中,在程序中我没有写,如果你看到这里会写的话请把那句代码和位置发到留言处,说明你也认真看并且思考了。由此看出,使用散列表用来检查重复,速度非常快。

  • 缓存

缓存对于非计算机专业的学生来说,这个术语有点相对陌生,但几乎每个app和浏览器都附带一个功能叫做清除缓存,那么为什么会存在缓存这么一个东西?它的意义在哪里?

假设我们登录网站看到网站首页时是这么一个实现过程,我们在未登录状态时,网页拦截器会检测到我们的状态,自动映射到登录页,但我们输入账户密码后,点击登录按钮触发验证,网页会将账户密码发送到后台,从数据库查询这个账户是否存在,存在会将账户信息和token(一种状态验证码)存到浏览器缓存中去,并将网站首页展示给用户。当用户第二次访问网站时,当token不过期的情况下,用户无需登录,即可看到网站首页。那么我们有的时候会发现网页展示非常的缓慢,你可能会吐槽这个网站的服务器怎么会那么垃圾,殊不知服务器已经很努力的进行工作,它服务的可能是全国几亿用户,那么怎么加快这种展示速度呢。那就是合理利用缓存,对于用户经常访问的网页,服务器可以将这些页面url和数据存到浏览器缓存中,当用户请求这个url时就映射出这个网页。从而显得又快又好。这就是为什么有的时候不用联网也能看到网站页面的时候,其实是服务器已经给你把页面装载到缓存中。

缓存一般有如下两个优点

1、 用户能够更快地看到网页

2、 网站做的工作量会大大减少,服务器压力会减小

当用户点击查看网页时,浏览器会检查自身缓存有没有这些url和数据,如果没有的情况下才会向服务器发起请求,再把这些数据存入缓存,再展示给用户看。这样的话,当下次用户再次请求这个url时,可以直接利用缓存数据,而不用再向服务器发起请求。

打开网易新闻 查看更多图片

注意看左下角浏览器的文字