中易网

求救:java--使用关键字类从Hashtable中取值

答案:3  悬赏:70  
解决时间 2021-02-19 16:58
谁能帮我修改下面的代码,达到:
使用Mykey类作为关键字类,从Hashtable中取出所有关键字的集合和取出所有值的集合?(我用的是JDK5.0,要考虑到泛型.)

import java.util.*;

class Mykey
{
private String name;
private int age;
public Mykey(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString()
{
return new String(name+","+age);
}
public boolean equals(Object obj)
{
if(name.equals(obj.name) && age==obj.age)
return true;
else
return false;
}
public int hashCode()
{
return name.hashCode()+age;
}
}

public class HashtableTest
{
public static void main(String []args)
{
Hashtable<Integer,String> numbers=new Hashtable<Integer,String>();
numbers.put(new Mykey("zhang san",18),new Integer(11));
numbers.put(new Mykey("lisi",15),new Integer(22));
numbers.put(new Mykey("wangwu",12),new Integer(33));
Enumeration e=numbers.keys();
while(e.hasMoreElements())
{
Mykey key=(Mykey)e.nextElement();
System.out.println(key.toString()+"=");
System.out.println(numbers.get(key).toString());
}
}
}
最佳答案
import java.util.*;

class Mykey
{
private String name;
private int age;
public Mykey(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString()
{
return new String(name+","+age);
}

public boolean equals(Object obj)
{
if(!(obj instanceof Mykey))
{
return false;
}

if(name.equals(((Mykey)obj).name) && age==((Mykey)obj).age)
return true;
else
return false;
}

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

public class HashtableTest
{
public static void main(String []args)
{
Hashtable<Mykey,Integer> numbers=new Hashtable<Mykey,Integer>();
numbers.put(new Mykey("zhang san",18),new Integer(11));
numbers.put(new Mykey("lisi",15),new Integer(22));
numbers.put(new Mykey("wangwu",12),new Integer(33));
Enumeration e=numbers.keys();
while(e.hasMoreElements())
{
Mykey key=(Mykey)e.nextElement();
System.out.println(key.toString()+"=");
System.out.println(numbers.get(key).toString());
}
}
}
全部回答
考虑泛型不考虑泛型不是重要的,你没有理解好hash算法。 首先,建议看看java实践这本书,对你很有好处。 你的错误:将Mykey作为key值后,在取出时不正确。 举个例子:Map a = new HashMap(); a.put(new Mykey(1),"...."); 那么,在a.get(new Mykey(1)) 时得到的是空值; 因为2次new Mykey(1)并不是同一个对象,你的Mykey类,没有重写hashCode()方法和equals()方法。所以默认继承object类的equals和hashCode方法。Map实现都是按照equals来插入的。
考虑泛型不考虑泛型不是重要的,你没有理解好hash算法。 首先,建议看看java实践这本书,对你很有好处。 你的错误:将Mykey作为key值后,在取出时不正确。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
银耳是熟的吗?凉拌银耳还需要用水煮吗?
留守儿童一百二百字作文
华琳五交化在什么地方啊,我要过去处理事情
qq消息管理器上的纪录能存多长时间?
我想把文件上的红章ps掉,红章下的字不要p掉
什么工作能有大量时间看书?
请问下, 我4岁做过先天性心脏病,现在22岁身
某学生管理系统,依据学生表创建一个实体类St
新宝来。什么颜色好些。 看好 黑色 和 银色,
从成都到林芝怎么走
芦溪县东阳村村民委员会在哪里啊,我有事要去
让我去渡心里的那片海
国内最好的美术平面设计学院有哪些?
在海口哪里能买到合法的进口烟?
企业累计折旧怎么用
推荐资讯
孔雀鱼出现胎斑 多久
蟹之家阳澄湖大闸蟹潍坊总店在哪里啊,我有事
六月去给妈妈上坟了!七月十五还能去吗?
爷爷在世的时候种了五颗枣树,现在只有门旁两
安徽公德(大正)律师事务所地址在什么地方,想
现在天津有3D艺术展么?想要去拍照片,请各位
半岛铁盒与爱国者有关系吗?
我的世界1.6.4末影龙蛋怎么孵化
汽车之家违章查询助手手机缴罚款还扣分吗
鹤群大酒店-KTV包厢地址在哪,我要去那里办事
兰州科技外语学校的学费
电流表可以并联在被测电路中吗?如果并联会出
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?