Hashtable 中的 hashcode 是怎么得到的?

douchog_13k 2009-05-18 10:06:37
看教程说Hashtable中hashCode的方法是把对象在内存中的地址运算后得到的,但是为什么我定义了两个对象后,得到的两个对象的hashCode相等?


Person p1=new Person("lisi",1);
Person p2=new Person("lisi",1);
p1.hashCode()==p2.hashCode()//这里是相等的,
...全文
136 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
douchog_13k 2009-05-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 knightzhuwei 的回复:]
String类应该也已经重写过hashcode方法了 并且保证只要string的equels方法是相等的 hashcode方法也是相等的
[/Quote]
明白了。
knightzhuwei 2009-05-18
  • 打赏
  • 举报
回复
String类应该也已经重写过hashcode方法了 并且保证只要string的equels方法是相等的 hashcode方法也是相等的
一洽客服系统 2009-05-18
  • 打赏
  • 举报
回复
Hashtable中hashCode的代码
public synchronized int hashCode() {
int i = 0;
if (count == 0 || loadFactor < 0.0F)
return i;
loadFactor = -loadFactor;
Entry[] entrys = table;
for (int i_13_ = 0; i_13_ < entrys.length; i_13_++) {
for (Entry entry = entrys[i_13_]; entry != null;
entry = entry.next)
i += entry.key.hashCode() ^ entry.value.hashCode();
}
loadFactor = -loadFactor;
return i;
}
douchog_13k 2009-05-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 knightzhuwei 的回复:]
看看你的Person类 应该已经重写过hashcode方法了
[/Quote]
哦,对了,我那个Person类真的是重写了hashCode方法了。
可是下面这样写为什么s1和s2的hashCode相等?

String s1=new String("abc");
String s2=new String("abc");
if(s1.hashCode()==s2.hashCode())
{
System.out.println("OK");
}
knightzhuwei 2009-05-18
  • 打赏
  • 举报
回复
看看你的Person类 应该已经重写过hashcode方法了

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧