黑马程序员技术交流社区

标题: 关于hashtable的小问题 [打印本页]

作者: 吴亨    时间: 2011-12-15 23:29
标题: 关于hashtable的小问题
本帖最后由 吴亨 于 2011-12-16 17:24 编辑

import java.util.*;
public class TestHashtable {

        public static void main(String[] args) {
                Hashtable s = new Hashtable();
                s.put(new MyKey("zhangsan",20),new Integer(1));
                s.put(new MyKey("lisi",23),new Integer(2));
                Enumeration e = s.keys();
                while(e.hasMoreElements())
                {
                        MyKey mk = (MyKey)e.nextElement();
                        System.out.println(mk.name+","+mk.age+":"+s.get(mk));
                }
               
        }
}

class MyKey {
        public String name = "unknown";
        public int age = 0;
        /**
         * Method Mykey
         *
         *
         */
        public MyKey(String name,int age) {
                this.name = name;
                this.age = age;
        }

        public boolean equals(Object obj) {
           if(obj instanceof MyKey)
                      {
                                  MyKey objt = (MyKey)obj;
                                   if(name.equals(objt) && age==objt.age)
                                     return true;
                             else
                                     return false;
               }
       else
             return false;
        }


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

QQ截图20111125232817.png (2.11 KB, 下载次数: 35)

QQ截图20111125232817.png

作者: 吴亨    时间: 2011-12-15 23:29
为何不输出null?
作者: 付旭    时间: 2011-12-16 00:10
唉  我还看不懂...
作者: 李振元    时间: 2011-12-16 08:53
因为楼主定义的构造方法时两个参数
public MyKey(String name,int age) {
                this.name = name;
                this.age = age;
        }
将上述代码改为三个参数就ok了,如增加一个
private int id;
public MyKey(String name,int age,int id) {
                this.name = name;
                this.age = age;
                this.id = id;
        }
作者: 刘基军    时间: 2011-12-16 11:20
  1. class Test {

  2.         public static void main(String[] args) {
  3.                 Hashtable s = new Hashtable();
  4.                 s.put(new MyKey("zhangsan",20),new Integer(1));
  5.                 s.put(new MyKey("lisi",23),new Integer(2));
  6.                 Enumeration e = s.keys();
  7.                 while(e.hasMoreElements())
  8.                 {
  9.                         MyKey mk = (MyKey)e.nextElement();
  10.                         //LZ的意思应该是:不应该输出null吧,呵呵
  11.                         //加上了该语句,测试mk实际情况,测试结果为2个false,我还没接触枚举,所以还看不出来哪边的问题,先供给你参考一下
  12.                         System.out.println(mk.equals(new MyKey("zhangsan",20)));
  13.                         
  14.                         System.out.println(mk.name+","+mk.age+":"+s.get(mk));
  15.                 }
  16.                
  17.                                                                
  18.                
  19.         }
  20. }
复制代码

作者: 吴亨    时间: 2011-12-16 12:44
付旭 发表于 2011-12-16 00:10
唉  我还看不懂...

这个id是什么意思?
作者: 刘基军    时间: 2011-12-16 15:44
本帖最后由 monghuan 于 2011-12-16 16:12 编辑
  1. import java.util.*;
  2. public class TestHashtable {

  3.         public static void main(String[] args) {
  4.                 Hashtable s = new Hashtable();
  5.                 s.put(new MyKey("zhangsan",20),new Integer(1));
  6.                 s.put(new MyKey("lisi",23),new Integer(2));
  7.                 Enumeration e = s.keys();
  8.                 while(e.hasMoreElements())
  9.                 {
  10.                         MyKey mk = (MyKey)e.nextElement();
  11.                         System.out.println(mk.name+","+mk.age+":"+s.get(mk));
  12.                 }
  13.                
  14.         }
  15. }

  16. class MyKey {
  17.         public String name = "unknown";
  18.         public int age = 0;
  19.         /**
  20.          * Method Mykey
  21.          *
  22.          *
  23.          */
  24.         public MyKey(String name,int age) {
  25.                 this.name = name;
  26.                 this.age = age;
  27.         }

  28.         public boolean equals(Object obj) {
  29.            if(obj instanceof MyKey)
  30.                       {
  31.                                   MyKey objt = (MyKey)obj;
  32.                                    if(name.equals(objt.name) && age==objt.age)  //-------这边应该是"objt.name",而不是"objt",虽然我知道你是不小心写的,但我还是想打你一顿
  33.                                      return true;
  34.                              else
  35.                                      return false;
  36.                }
  37.        else
  38.              return false;
  39.         }


  40.         public int hashCode() {
  41.                 return name.hashCode()+age;
  42.         }
  43. }


复制代码
运行结果:
  1. lisi,23:2
  2. zhangsan,20:1
复制代码

作者: 吴亨    时间: 2011-12-16 17:22
monghuan 发表于 2011-12-16 15:44
运行结果:

monghuan 哥厉害,小弟错了。
作者: 吴亨    时间: 2011-12-16 17:23
monghuan 发表于 2011-12-16 15:44
运行结果:

能加我qq;1023517092.想向你讨教一下。
作者: 刘基军    时间: 2011-12-16 18:16
吴亨 发表于 2011-12-16 17:23
能加我qq;1023517092.想向你讨教一下。

我这边上不了QQ,我在上班的有限制,公司宿舍也没有网络的,呵呵,这个论坛应该可以发消息的
作者: 吴亨    时间: 2011-12-16 22:38
monghuan 发表于 2011-12-16 18:16
我这边上不了QQ,我在上班的有限制,公司宿舍也没有网络的,呵呵,这个论坛应该可以发消息的 ...

奥。哎。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2