java问题 看了张孝祥JAVA的课题
//主要有两个类 以下是驱动类
import java.util.*;
public class TestHashtable {
public static void main(String [] args){
Hashtable numbers= new Hashtable();
numbers.put(new MyKey("zhangsan",18),new Integer(1));
numbers.put(new MyKey("lisi",19),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() + "="); //
第一个问题 为什么key.toString中的toString加不加一样
System.out.println(numbers.get(key));
}
System.out.println(numbers.get(new MyKey("zhangsan",18)));
}
}
//-------------------以下是驱动类调用的类 MyKey---
public class MyKey {
private String name = null;
private int age = 0;
public boolean equals(Object obj){
if(obj instanceof MyKey){
MyKey objTemp = (MyKey)obj;
if(name.equals(objTemp.name) && age == objTemp.age){
return true;
}
else{
return false;
}
}
else{
return false;
}
}
public String toString(){
return name + "," + age;
}
public int hashCode(){
return name.hashCode() + age; //
第二个问题 为什么name可以直接调用hashCode
}
public MyKey(String s ,int i ){
this.name = s;
this.age = i;
}
}
[
本帖最后由 kkllchun 于 2010-2-9 17:19 编辑 ]
----------------解决方案--------------------------------------------------------
哥看的不是JAVA
是寂寞!
----------------解决方案--------------------------------------------------------
呵呵
----------------解决方案--------------------------------------------------------
哈哈 这论坛龟怎么那么多 结贴走人
----------------解决方案--------------------------------------------------------
大家都回家过节了,呵呵
----------------解决方案--------------------------------------------------------
第一个问题,看来你对toString()方法并不是很了解
直接输出对象的时候,一定会执行toString()方法,当没有覆盖Object toString方法时,则默认执行Object toString()
查阅API文档:
Object类的 public String toString() returns
getClass().getName() + '@' + Integer.toHexString(hashCode())
加与不加toString结果都一样
第二个问题,hashCode就是一个散列码。一般情况下,如果hashCode相同,则equals应该也判定相等。
hashCode用来快速查询用的
你看到的那一串的格式如下,比如一个String@4e57de
"@ "前面的是你的类名,后面的就是散列码的16进制表示。hashCode的查询原理:先有很多个数组,然后你要往容器里面放东西,
[
本帖最后由 lampeter123 于 2010-2-10 21:43 编辑 ]