谁能帮我修改下面的代码,达到:
使用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());
}
}
}
求救:java--使用关键字类从Hashtable中取值
答案:3 悬赏:70
解决时间 2021-02-19 16:58
- 提问者网友:虛偽丶靜
- 2021-02-18 17:36
最佳答案
- 二级知识专家网友:夢想黑洞
- 2021-02-18 18:08
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());
}
}
}
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());
}
}
}
全部回答
- 1楼网友:无字情书
- 2021-02-18 19:45
考虑泛型不考虑泛型不是重要的,你没有理解好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来插入的。
- 2楼网友:错过的是遗憾
- 2021-02-18 19:35
考虑泛型不考虑泛型不是重要的,你没有理解好hash算法。
首先,建议看看java实践这本书,对你很有好处。
你的错误:将Mykey作为key值后,在取出时不正确。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯