5 回答

TA贡献1790条经验 获得超9个赞
Hash
中文翻译为散列,其实就是用于表示事物特征的一串特征码。
事物和其Hash
其实就像人和指纹的关系,人完整的相貌有眼鼻口舌手脚等等等等,而指纹就是一个能鉴别不同人之间的特征,所以可以理解问指纹就是人的Hash
。Hash
的用处很多,比如验证、加密等都可以用到Hash
。
用于验证这就无须赘述了吧,人可以通过指纹来验证,文件、对象等等都可以通过其自身的Hash
来验证,比如国外的一些网站提供下载时,一般还会提供一份下载文件的Hash
(算法各有不同),以帮助下载者验证下载的文件是否正确(文件可能因为网络错误或者中间者攻击而被篡改)。不过Hash
提取的只是特征,就行指纹一样,虽然说难以找到指纹一样的人,但并不代表找不到,所以Hash
还存在一种问题,就是Hash冲突
,即两个不同的事务其采集的特征是一致的。这种情况下我们可以采用不同的Hash
算法进一步加以比较,比如指纹相同再比较一下脚纹,不过最终的办法还是真正全身比较。
而正是因为Hash
只提取了事物的部分信息,所以用于加密也是非常可靠的,就如通常网站都会采用Hash
来对密码进行加密,其作用就是即使密码泄露,破解者也无法知道密码到底是什么,就好像你知道指纹,但你却难以找到拥有这个指纹的人是谁。
在Java
中HashMap
和HashTable
都是通过Hash算法
来实现高效Map
的方式,其区别仅是一些细节限制方面有所不同,和Hash算法
本身并没有什么关系。

TA贡献1829条经验 获得超7个赞

TA贡献1844条经验 获得超8个赞
呃,你可以把它看成一个DNA,每个生物的DNA都是不一样的(在这里请不要举双胞胎DNA一样的例子啦)。那么在计算机中,每个对象的Hash(DNA)都是不一样的。
Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“)。
HashTable是比较古老的东西了..主要区别在于HashMap 允许空(null)键值(key)
添加回答
举报