equals(Object obj);hashCode();toString();

本文解释了Java中hashCode()和toString()方法的工作原理,强调了散列码的重要性及其在哈希表中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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() + '@' + [color=red]Integer.toHexString(hashCode())[/color]这里的散列码被转型成了十六位进制来表示了。修改以上代码:

System.out.println(Integer.valueOf(t1.toString().substring(17),16).toString());


现在JDK输出:

33263331
33263331

[size=medium]散列码小补课:[/size]

在一个序列中查找一个特殊的对象所需要的时间取决于容器中对象的数量。如果我们没有对容器中元素进行排序,那么随着元素数量的增加,你所需要的查找时间也就直线增加了:如果容器中元素的数量增加了一倍,那么你用来查找一个特殊元素的时间也就增加了一倍。然而,如果我们对容器中的元素进行了排序,那么查找时间就是随着元素数量的对数而增加的了:要使查找一个元素的时间增加一倍,你必须使集合中的元素数量增加四倍。如果你用一个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类库中自带的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值