为什么要用哈希表存放键值对?

shuaicike2013 2013-03-12 04:41:54
有什么好处和坏处么?????
...全文
964 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xboxeer 2013-03-13
  • 打赏
  • 举报
回复
引用 6 楼 shuaicike 的回复:
引用 2 楼 xboxeer 的回复:哈希的好处就是如果哈希函数选好 值的分布均匀 那么对于哈希表的查找时间复杂度是O(1),是一个常数级的操作 非常快哦 能说的详细一点吗?例如怎样才能让值分布均匀,查找时间复杂度怎么得来的呢?
怎样分布均匀是看数据的 要扯的话能扯很多 至于时间复杂度 举个例子 比如你有一堆字符串,a,b,c,d,e 然后我们假设这些a,b,c,d,e的哈希值分别为1,2,3,4,5,就是说哈希函数y=f(x),当x=a的时候 y=1, 依次类推(这个哈希函数我随便编的)。 当我们把它们放到一个哈希表里面的时候 是利用他们本身的值x,算出他的哈希值y, 然后放到对应的内存块y里面。所以当你在对哈希表做查找的时候a是否在哈希表里面 先是通过之前的哈希函数y=f(x)算出a的哈希值为1,然后查找哈希表里面内存地址为1的内存块儿,就会发现a在里面,如果我们查找f 那么算出哈希值为6,是不在哈希表里面的。 所以你会发现 对于哈希表 最好的情况 一个查询操作 只需要一个操作 就能找到所需的数据 如果是链表 那么可能我要从头到尾遍历, 如果是平均二叉树 那么最好的情况也要log2n的时间复杂度 上面是哈希函数分布均匀的情况 如果分布不均匀 情况就复杂了 涉及到链表 以及重复情况下的数据存放方式 建议参考数据结构相关书籍 所以说哈希表的速度是非常快的 但前提是 哈希函数要好 分布要均匀 这是个很大的课题
  • 打赏
  • 举报
回复
引用 1 楼 sbicfwxf9 的回复:
查一下hashtable和dictionary的区别
dictionary<K,R>基于hash进行了高级的优化。这两个东西都等于是lz的问题。
  • 打赏
  • 举报
回复
引用 楼主 shuaicike 的回复:
有什么好处和坏处么?????
你想用什么?
菜牛 2013-03-12
  • 打赏
  • 举报
回复
hash表通过键值计算出hash数,根据这个数排序存储,查找时计算查找的键值的hash数,对于排过序的值数组来说查找是可以优化到非常快的。
上海程序员3 2013-03-12
  • 打赏
  • 举报
回复
不用去想怎么实现的,要想的是功能,比如有一帮东西,你要找到它,得给他们每个取个名字,哈希就是用来取好名字存放东西的,这样才能找到!
shuaicike2013 2013-03-12
  • 打赏
  • 举报
回复
引用 2 楼 xboxeer 的回复:
哈希的好处就是如果哈希函数选好 值的分布均匀 那么对于哈希表的查找时间复杂度是O(1),是一个常数级的操作 非常快哦
能说的详细一点吗?例如怎样才能让值分布均匀,查找时间复杂度怎么得来的呢?
shuaicike2013 2013-03-12
  • 打赏
  • 举报
回复
引用 4 楼 nice_fish 的回复:
广告怎么来说来着? 快,准,狠
怎么就能快,准,狠了?
  • 打赏
  • 举报
回复
广告怎么来说来着? 快,准,狠
cshas 2013-03-12
  • 打赏
  • 举报
回复
这个问题还真没想过.mack. 我还用过自己写的数组集合
xboxeer 2013-03-12
  • 打赏
  • 举报
回复
哈希的好处就是如果哈希函数选好 值的分布均匀 那么对于哈希表的查找时间复杂度是O(1),是一个常数级的操作 非常快哦
sbicfwxf9 2013-03-12
  • 打赏
  • 举报
回复
查一下hashtable和dictionary的区别

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧