For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
java程序员必读HashCod指南
很多有基础的java程序员遇到HashCode,就会一头雾水,那么怎么学习HashCode呢?如何才能实现HashCode呢?从一般角度来看,Equality是不错的,但是hashcode更则具技巧性。如果我们在hashcode上多下点功夫,我们就能了解到hashcode就是用在细微处去提升性能的。
【HashCode实操】
将传递给contains的实例与每个元素进行比较很浪费时间。还好,整个这类数据结构使用了一种更高效的方法。它不会将请求的实例与每个元素比较,而是使用捷径,找到可能与之相等的实例,然后只比较这几项。
这个捷径就是哈希码——从对象计算出来的一个能代表该对象的整数值。与哈希码相同的实例不必相等,但相等的实例一定有相同的哈希码。(或者说应该有,我们稍后会对这个问题进行简单讨论)。这类的数据结构常常使用这种技术命名,在名称中加入Hash以便识别,其中最具代表性的就是HashMap。
【如何进行?】
添加一个元素的时候,使用它的哈希码来计算存放在内部数组(称为桶)中的位置(序号)。
另一个不等同的元素如果具有相同的哈希码,它会被放在同一个桶中,与原来那个放在一起,比如把它们放在一个列表中。
如果传递一个实例给contains方法,会先计算它的哈希码来找到桶,只有同一个桶中的元素需要与这个实例进行比较。
使用这种方法实现contains的情况很少,在理想的状态下根本不需要equals比较。
将equals、hashCode定义在Object中。
【哈希知识分享】
如果把hashCode作为一种快捷方式取决于其是否相等,那么只有一件事情我们需要关心:相等的对象应该有一致的哈希码。
这也是为什么,如果我们覆写equals方法,就必须创建一个匹配的hashCode实现!此外,实现equal应该是依据我们的实现而实现的,这可能会导致没有相同的哈希码,因为他们使用的是Object的实现。
免责声明:本文由昆明it培训小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除。
0元课程福利来袭,扫码可加入试听课程报名!