A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴亨 黑马帝   /  2011-12-15 23:29  /  2216 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴亨 于 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, 下载次数: 27)

QQ截图20111125232817.png

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

10 个回复

倒序浏览
吴亨 黑马帝 2011-12-15 23:29:49
沙发
为何不输出null?
回复 使用道具 举报
付旭 黑马帝 2011-12-16 00:10:45
藤椅
唉  我还看不懂...
回复 使用道具 举报
因为楼主定义的构造方法时两个参数
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;
        }
回复 使用道具 举报
  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:27
地板
付旭 发表于 2011-12-16 00:10
唉  我还看不懂...

这个id是什么意思?
回复 使用道具 举报
刘基军 黑马帝 2011-12-16 15:44:01
7#
本帖最后由 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:55
8#
monghuan 发表于 2011-12-16 15:44
运行结果:

monghuan 哥厉害,小弟错了。
回复 使用道具 举报
吴亨 黑马帝 2011-12-16 17:23:40
9#
monghuan 发表于 2011-12-16 15:44
运行结果:

能加我qq;1023517092.想向你讨教一下。
回复 使用道具 举报
刘基军 黑马帝 2011-12-16 18:16:15
10#
吴亨 发表于 2011-12-16 17:23
能加我qq;1023517092.想向你讨教一下。

我这边上不了QQ,我在上班的有限制,公司宿舍也没有网络的,呵呵,这个论坛应该可以发消息的
回复 使用道具 举报
吴亨 黑马帝 2011-12-16 22:38:31
11#
monghuan 发表于 2011-12-16 18:16
我这边上不了QQ,我在上班的有限制,公司宿舍也没有网络的,呵呵,这个论坛应该可以发消息的 ...

奥。哎。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马