hashcode与equals区别简单说明
set集合用什么数据库存储?
set集合用什么数据库存储?
set集合用对象来存储。
对象对于属性与方法的存储具有唯一性,不存在两个重复的值。
set集合中保存对象的时候,去重,要重写对象的hashcode()和equals()方法,原始set的数据结构,在取数的时候,先取hashcode,如果有多个hashcode相等的值,进一步比较equals的函数值,取出对应节点的数据。
hashcode是地址值吗?
默认的hashCode不是地址值,只是个随机数。此时想要hashcode为真正的地址值,改一下,-XX:hashCode4.这下就是真正的hashcode等于地址值了。
hashCode的作用,是为了在使用数据结构为hash表的集合时,集合会对新加入元素的hash值和自身元素的hash值进行对比,这时就会用到新加入元素的hashCode获取哈希值。
如果数据结构为hash表的集合中加入的元素是引用类型,不重写hashCode和equals的话,会出现元素不唯一的情况,因为默认hashCode转换的是地址值,默认equals对比的也是地址值,同一个类两个实例,地址值也一定不一样。
还有一个细节就是重写了hashCode后,输出的地址值变成了包名 hash值,但真正的内存地址值并没有变。
哪两个词的hashcode相等?
参考 Object.hashCode() JavaDoc说明, 如果两个对象 hashCode 相等必然 equals
hashCode 的常规协定是:
1. 在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
2. 如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
3. 如果根据 equals() 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。