java-hash
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-hash,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2284字,纯文字阅读大概需要4分钟。
内容图文
![java-hash](/upload/InfoBanner/zyjiaocheng/591/4d072cc0997343569344da97dbda448e.jpg)
对象比较
两个对象,是否相等
上述命题是否正确呢?其实问题本身就存在问题
- 两个对象指向的是同一个实体
- 两个对象确定是不同实体,但是实体之间存在比较关系
对于不等判断太简单,而对于相等这个话题,需要深究。
硬相等
如果两个对象确定是同一个,这个时候可以称得上是相等的:自身必然是自身。
这种所谓的相等其实是指定对象的身份验证,属于一种物理上的相等。
软相等
这是一种普遍的、常态的比较方式,正如同一个牌子,同一个型号这种说法。
在大多时候,即使是不同的事物,我们也需要它相等,这时候需要的是逻辑上的相等。
因此,需要从物理特征里面抽取一个能够用来进行逻辑比较的逻辑特征,从而达成逻辑上的对象比较。
比较操作
==
在java
中,这是最方便的比较办法了,因为它够简洁有力,不会有更多的场景需要判断。
但是,它是一种硬相等
比较,它无法完成逻辑意义上的比较功能。
两个男子,判断他们老婆是否相等(生日相同)
这个时候,如果你需要结果为真,那就真是一个悲剧。
equals
class Wife{
int age;
public boolean equals(Object another){
if(this == another){
return true;
}
if(another instanceof Wife){
Wife anotherWife = (Wife)another;
return anotherWife.age == age;
}
return false;
}
}
这个时候就比较好了,能够提供逻辑上的相等的不同的实体,而非实体限定。
对象管理
HASH
上面两种方式,已经覆盖了全盘的对象比较场景。但是,有些场景下并不好用。
基于对象hash
的对象管理场景下,它要求对象的hash
是独一无二的。
hash
虽然数学和实践中大部分都是数值,但是它的确只需要独一无二,能够一一对应即可。至于数组划分,那是另一个方面的影响。
不过由于硬件和算法的限定,我们并不能够真正的提供独一无二的hash
数值,hash
碰撞不可避免。
这就会产生一个问题:不同的对象,它的hash
是有相等的可能的
MAP
即使是hash
碰撞,一般来说问题也不大,只要不涉及hash
对象管理,也就是HashMap
和HashSet
。
但是,这不是单点能够决定的事情,针对这些结构,里面的逻辑还是需要进行迎合的。
- 首先,为了确定存放位置,是需要获取
hash
的,==
的硬比较在这一层完全没有用武之地。 - 其次,存在相同的
hash
,矛盾就会凸显,因为不同对象可能存在hash
的碰撞,如果发生了碰撞,就只能使用equals
进行二度判断了。
其他
正如不同的人答题,得分也可能相同;对于一些特征属性不同的对象,我们也想让他在某些条件下存在等价的情况,也可以重写hashCode
。
和前一个理由刚好相反,这是主动的构造碰撞的情况。
制定相等
看场景,看需求。
不过对于HashMap
这种说不定会用上的东西,而且需要逻辑相等话,一定记得重写一下hashCode
和equals
方法
如果不重写
hashCode
:无法制定相同的逻辑相等(特殊领域中)equals
:无法构建逻辑相等,因为默认==
物理相等,无法进行相同hash
的碰撞判定
内容总结
以上是互联网集市为您收集整理的java-hash全部内容,希望文章能够帮你解决java-hash所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。