日期:2014-05-20  浏览次数:20715 次

hashCode()的用法
import   java.util.*;
public   class   TestCollection   {
public   static   void   main(String[]   args)   {
Collection   c   =   new   ArrayList();
c.add( "Hello ");
c.add(new   Worker( "royzhou ", "22 "));
c.add(new   Integer(100));
c.remove( "Hello ");
c.remove(new   Integer(100));
c.remove(new   Worker( "royzhou ", "22 "));
System.out.println(c);


}
}

class   Worker   {
String   name;
String   age;

Worker(String   name,   String   age)   {
this.name   =   name;
this.age   =   age;
}

public   String   toString()   {
return   name+ "   "+age;
}

public   boolean   equals(Object   obj)   {
if(obj   instanceof   Worker)   {
Worker   worker   =(Worker)   obj;
return((name.equals(worker.name))&&(age.equals(worker.age)));
}
return   super.equals(obj);
}

public   int   hashCode()   {
return   name.hashCode();
}

}

程序里面hashCode()有什么用   ,在这里需要吗?

------解决方案--------------------
在这里我也不是很肯定 了,因为在有些地方要比较你放进去的对像是否已经存在,比如说,如果你把一堆的对像放进一个Set(集合)里边,那么Set是不是允许有重复对像,那么怎么样才算重复呢,就是通过调用对像的equals()和hasCode方法进行比较的,但具体先调用哪个我忘记了.你可以试试.这里边可能在remove()方法中会用到,你可以查一直帮助文档,里边可能会有说明 的
------解决方案--------------------
你重写了equals方法就必须重写hashCode方法.以便用户可以将对象插入到散列表中.
而且euqals和hashCode的定义必须一致.
由于程序里决定equals的是name和age
而hashCode里面只用了name的hashCode
所以个人认为这不是一个好的hashCode方法.
------解决方案--------------------
帮顶
------解决方案--------------------
学习