黑马程序员技术交流社区

标题: 关于哈希表的问题 [打印本页]

作者: 深圳在漂移    时间: 2013-7-29 10:48
标题: 关于哈希表的问题
本帖最后由 杨兴庭 于 2013-7-30 22:42 编辑

  请问大家,关于哈希表的概念怎么理解,我是新手,请说得越简单易懂越好,如果可以请再举几个简单的例子吧,谢谢各位大大~
作者: Hello_world_    时间: 2013-7-29 11:00
hash表是介于链表和二叉树之间的一种中间结构
白话说解释就是,所有的数据就好像许许多多的书本。如果这些书本是一本一本堆起来的,就好像链表或者线性表一样,整个数据会显得非常的无序和凌乱,在你找到自己需要的书之前,你要经历许多的查询过程;而如果你对所有的书本进行编号,并且把这些书本按次序进行排列的话,那么如果你要寻找的书本编号是n,那么经过二分查找,你很快就会找到自己需要的书本;但是如果你每一个种类的书本都不是很多,那么你就可以对这些书本进行归类,哪些是文学类,哪些是艺术类,哪些是工科的,哪些是理科的,你只要对这些书本进行简单的归类,那么寻找一本书也会变得非常简单,比如说如果你要找的书是计算机方面的书,那么你就会到工科一类当中去寻找,这样查找起来也会显得麻烦。


作者: ☆今☆    时间: 2013-7-29 22:21
哈希表就是根据算法计算一个值,只要这两结果一样,就hash值一样
比如:7,12用除留余数法,同除以5,结果(即余数)都是2,那么这两就具有同个哈希值.
相同的值,在Java中采用顺延存储,即在同一个值的位置(就是2),同时存储7和12.

作者: 黑马李昂    时间: 2013-7-29 23:12
  Hash,一般翻译做“散列”,也有直接音译为”哈希“的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
    举例简单来说,我们在堆内存中new一个对象,为了方便我们在程序中方便找到这个对象,java虚拟机会提供给我们一个首地址值,其实它不是实际的地址值,而是java虚拟机用哈希表的运算方法,提供一个十六进制数作为地址值方便程序员查找到这个对象,hash表就是找到一种数据内容和数据存放地址之间的映射关系。
    一点拙见,希望和楼主共同探讨{:soso_e100:}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2