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;
}
}
import java.util.*;
public class HashtableTest
{
public static void main(String[] args)
{
Hashtable numbers=new Hashtable();
numbers.put(new MyKey("zhangsan",18),new Integer(1));
numbers.put(new MyKey("lisi",15),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()+"=");
System.out.println(numbers.get(key).toString());
}
}
}
运行结果:
zhangsan,18=2
lisi,15=1
wangwu,20=3
其实,运行上述代码会提示:
--------------------Configuration: --------------------
D:\myjava\HashtableTest.java:34: 找不到符号
符号: 变量 name
位置: 类 java.lang.Object
if(name.equals(obj.name) && age==obj.age)
^
D:\myjava\HashtableTest.java:34: 找不到符号
符号: 变量 age
位置: 类 java.lang.Object
if(name.equals(obj.name) && age==obj.age)
^
注意:D:\myjava\HashtableTest.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
自己查找原因应该把
public boolean equals(Object obj)
{
if(name.equals(obj.name) && age==obj.age)
return true;
else
return false;
}
中的obj声明类型改为MyKey obj,结果运行一切顺利。