如何实现用对象作为Key对HashMap进行查找

来源:互联网 发布:重庆犀牛软件教学 编辑:程序博客网 时间:2024/06/15 08:32
首先,我们看一段代码
class dog{
 int i;
 dog(int i){
  this.i=i;
 }
}

public class ttt {
 /**
  * @param args
  */
 public static void main(String[] args) {
  dog a=new dog(1);
  HashMap map=new HashMap();
  map.put(a,"1");
  dog aa=new dog(1);
  if(map.containsKey(aa)){
    System.out.println("found");  
  }
  else{
    System.out.println("not found");
  }
 }
}
 
这个程序运行结果是not found,是因为我们自己写的类默认是继承自Object类,所以,Object对每个对象创建时产生的hashcode是不一样的,也就是每次new dog(1)时产生的两个dog对象是不同的,为解决这个问题,我们必须同时改写hashCode()和equals()两个方法,如下
 
public int hashCode(){
  return i;
 }
 public boolean equals(Object o){
  return (o instanceof dog) && (i==((dog)o).i);
 }
 
这时,结果就是found了
 
注:比如java.lang.Integer类不会出现此类问题,因为他已经对这两个方法进行重写
0 0