HashTable类
HashTable类不紧可以像Vector类一样动态的存储一系列的对象,而且对存储的每一个对象(称为值)都安排另一个对象(称为关键字)与它相关联。
用做关键字的类必须覆盖Object.hashCode方法和Object.equals方法,
因为要取出数据时,传递给get()方法的参数要跟里面的关键字比较,这时就要使用equals()方法。另外如果这两个关键字相等,他们的hashcode()返回值也要相等。
编程举例:使用自定义类作为hashtable()关键字的类。
public class MyKey
{
String name=null;
int age=0;
public boolean equals(Object obj) //作为关键字的类要覆盖该方法
{
if(obj instanceof MyKey) //如果它是mykey类型的,则先要转换为mykey类型,因为编译器不知道他是什么类型的
{
MyKey objtemp=(MyKey)obj; //然后下面再比较里面的内容是否相等。
if(name.equals(objtemp.name)&&age==objtemp.age)
{
return true; //如果内容也相等,则相等
}
else
{
return false; //否则不等
}
}
else
{
return false; //如果它不是mykey类型的,则肯定不相等,因为类型都不同
}
}
public int hashCode() //作为关键字的类要覆盖该方法
{
return name.hashCode()+age; //因为string类已经覆盖了hashcode()方法,stringbuffer类没有覆盖该方法,所以不可以用做关键字类。
//如果name和age有一个不等,返回值则不等
}
public MyKey(String name,int age) //覆盖构造函数
{
this.name=name;
this.age=age;
}
public String toString() //如果不覆盖这个方法,则会产生乱码
{
return name+","+age;
}
}
import java.util.*;
public class HashTableTest
{
public static void main(String[] args)
{
Hashtable numbers=new Hashtable(); //新建一个hashtable类的实例
numbers.put(new MyKey("ZhangSan",18),new Integer(1)); 装入数据
numbers.put(new MyKey("LiSi",20),new Integer(2));
numbers.put(new MyKey("WangWu",16),new Integer(3));
Enumeration e=numbers.keys();
while(e.hasMoreElements())
{
MyKey Key=(MyKey)e.nextElement();
System.out.print(Key+"=");
System.out.println(numbers.get(Key));
}
}
}