在JAVA中默认的2个方法,equals(Object obj)与hashCode();
首先:
hashCode()则是返回对象的散列码。
而toString()方法责是返回getClass().getName() + '@' + Integer.toHexString(hashCode())
。
比如有如下代码:
package com.generic;
public class Test<E> {
private E name;
Test(E setName){
name=setName;
}
public void display(){
System.out.println(name);
}
}
package com.generic;
public class TestGeneric {
public static void main(String[] args) {
Test<String> t1=new Test<String>("Hello");
System.out.println(t1.hashCode());
System.out.println(t1.toString());
}
}
按道理来说,同一个对象的散列码应该是相同的,但是JDK的输入却是:
12677476
com.generic.Test@c17164
这里注意了,不要被假象所迷惑了,System.out.println(t1.toString());输出的是是getClass().getName() + '@' +
Integer.toHexString(hashCode())这里的散列码被转型成了十六位进制来表示了。修改以上代码:
System.out.println(Integer.valueOf(t1.toString().substring(17),16).toString());
现在JDK输出:
33263331
33263331
散列码小补课:
在一个序列中查找一个特殊的对象所需要的时间取决于容器中对象的数量。如果我们没有对容器中元素进行排序,那么随着元素数量的增加,你所需要的查找时间也就直线增加了:如果容器中元素的数量增加了一倍,那么你用来查找一个特殊元素的时间也就增加了一倍。然而,如果我们对容器中的元素进行了排序,那么查找时间就是随着元素数量的对数而增加的了:要使查找一个元素的时间增加一倍,你必须使集合中的元素数量增加四倍。如果你用一个key来搜索对象,你可以用比序列式容器更好的方法来存储你的对象。你可以用哈希表(hash table)。我觉得哈希表作用就是快速搜索对象。
代码片断:
Hashtable hashtable = new Hashtable();//创建一个哈希表
hashtable.Add("1", "11");//添加键名和值 hashtable.Add(键名, 值);键名是唯一的,不能重复。键名和值都可以是值类型,也可以是对象。
hashtable.Add("2", "22");
hashtable.Add("3", "33");
hashtable.Add("4", "44");
hashtable.Add("5", "55");
hashtable.Add("6", "66");
hashtable.Add("7", "77");
string s = hashtable["1"].ToString();
s="11";
小补课内容来自:http://zhidao.baidu.com/question/37370523.html
在JAVA默认实现中,任何2个不同的对象都不是等价的,因为JAVA默认的equals(Object obj) 方法是根据散列码来判断的,2个不同对象的散列码不可能相同。所以,如果你要变换这种默认的方式,那么你必须手写满足自己要求的equals(Object obj)方法,不要去使用JAVA类库中自带的方法。
分享到:
相关推荐
NULL 博文链接:https://jackosn-liao.iteye.com/blog/528757
今天小编就为大家分享一篇关于关于Object中equals方法和hashCode方法判断的分析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
重写equals和hashcode方法,学习和进步
Java equals 方法与hashcode 方法的深入解析.rar
本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...
这里是一个文档,里边讲解了hashCode与equals方法使用,大家要是不明白,可以去看看
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
Object类是所有Java类的根类,它定义了一些常用的方法,例如equals()、hashCode()、toString()等。本案例代码将详细展示Object类的使用方法,并提供一些实际场景下的案例,以帮助开发者更好地理解和运用这些方法。 ...
equals():反映的是对象或变量具体...根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的;当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。
equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.
关于重写equals,hashcode以及compareTo方法!
主要介绍了java中重写equals和重写hashCode()的相关资料,需要的朋友可以参考下
主要介绍了重写hashCode()和equals()方法详细介绍,涉及重写equals()方法,重写hashCode()方法,重写equals()而不重写hashCode()的风险等相关内容的介绍,具有一定借鉴价值,需要的朋友可以参考下
NULL 博文链接:https://zpointer.iteye.com/blog/1058337
NULL 博文链接:https://alpha2009.iteye.com/blog/570322
解析Java对象的equals()和hashCode()的使用
hashCode 字符串 复制与 入门 0. 将依赖添加到 pubspec.yaml dependencies : dataclass : latest_version dev_dependencies : dataclass_generator : latest_version 1. 用@dataClass 注释你的类 班级应该: ...
本文中详细的阐述了Java中经常遇到的equals、hashcode以及“==”号三者之间的区别
HashCode相同equals不同的2位字符集合算法 另附ASCII码表
TEH 使用注解来实现 toString、equals 和 hashCode,并强制执行这 2 条规则 任何用于 hashCode 的属性都将用于 equals 和 toString 用于 equals 的任何属性都将用于 toString 注释是 @ToString @ToStringEquals ...