CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

利用Hashtable类检索数据覆盖hashCode()方法时,要遵循什么规律?就比如这个程序,为什么+age?

楼主RUBY_uu()2006-03-02 08:45:52 在 Java / J2SE / 基础类 提问

就比如下面这个程序:  
  import   java.util.*;  
  public   class   HashtableTest  
  {  
  public   static   void   main(String   []args)  
  {  
  Hashtable   numbers=new   Hashtable();  
  numbers.put(new   MyKey("zhangsan",18),new   Integer(1));  
  numbers.put(new   MyKey("Lisi",15),new   Integer(2));  
  numbers.put(new   MyKey("Wangwu",20),new   Integer(3));  
  Enumeration   e=numbers.keys();  
  while(e.hasMoreElements())  
  {  
  MyKey   key=(MyKey)e.nextElement();  
  System.out.print(key.toString()+"=");  
  System.out.println(numbers.get(key).toString());  
  }  
  }  
  }  
   
  class   MyKey  
  {  
  private   String   name;  
  private   int   age;  
  public   MyKey(String   name,int   age)  
  {  
  this.name=name;  
  this.age=age;  
  }  
  public   String   toString()  
  {  
  return   new   String(name+","+age);  
  }  
  public   boolean   equals(Object   obj)  
  {  
  MyKey   m=(MyKey)obj;  
  if(name.equals(m.name)&&   age==m.age)  
  return   true;  
  else  
  return   false;  
  }  
  public   int   hashCode()  
  {  
  return   name.hashCode()+age;//就是这里,为什么要+age??  
  }  
  }  
   
  谢谢!  
  问题点数:10、回复次数:4Top

1 楼treeroot(旗鲁特)回复于 2006-03-02 09:05:45 得分 0

这种实现肯定并不是一个好的方式。  
  名字相同基本上可以认为是同一个人,以age来区别不是很好  
  即使使用两者来区别,hashCode的实现仍然不是很好Top

2 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-03-02 09:48:46 得分 0

hashCode()   要遵循   equals()为真时   hashCode()要相等  
   
  任何时候一个对象的hashCode()都返回同样的值  
  Top

3 楼hljaae(酒独倾)回复于 2006-03-02 11:39:54 得分 0

因为要覆盖hashcode方法,所以希望在name和age相同的时候,hashcode方法能够返回相同的值  
  因此,这里就用的是name+ageTop

4 楼ChDw(米)回复于 2006-03-02 11:45:42 得分 0

那要看到底有没有可能是同一个名字对应不同的人,其实如果重名的概率低的话的确不必要加age  
   
  其实你怎么写都没有所谓,只要你认为是相同的MyKey对象所返回的hashCode相同就行  
  即a.equals(b)   ==   true必有a.hashCode()   ==   b.hashCode();  
   
  反之则不一定成立,但是你应该尽可能的降低a.hashCode()   ==   b.hashCode()   但   a.equals(b)   ==   false的情况(这个情况是无可避免的)。Top

相关问题

  • 检索?
  • 检索参数?
  • 检索问题
  • 检索数据
  • 全文检索
  • 关于检索.....
  • hashcode()和hashtable()方法是作什吗用的?(就剩3分了)
  • Hashtable
  • hashtable
  • 向前检索,急!

关键词

  • hashcode
  • mykey
  • age
  • 相同
  • hashtable
  • 方法
  • equals
  • 返回
  • numbers
  • put

得分解答快速导航

  • 帖主:RUBY_uu

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo