当前位置: 代码迷 >> Java相关 >> java问题 看了张孝祥JAVA的课题
  详细解决方案

java问题 看了张孝祥JAVA的课题

热度:171   发布时间:2010-02-09 17:10:40.0
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  JAVA  张孝祥  

----------------解决方案--------------------------------------------------------
哥看的不是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 编辑 ]
本帖最近评分记录
  • kkllchun 积分 +5 我很赞同 2010-2-11 11:04

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2010-02-10 13:32:04
kkllchun

等 级:论坛游民
帖 子:55
专家分:13
注 册:2007-9-15
  得分:0 
多谢!
----------------解决方案--------------------------------------------------------
高手还是有的!
----------------解决方案--------------------------------------------------------
  相关解决方案