Hashtable类

来源:互联网 发布:淘宝关键词排名搜索 编辑:程序博客网 时间:2024/05/14 13:03

      Hashtable类用于快速的成对的检索数据,它不仅可以像Vector类一样动态存储一系列的对象,而且对存储的每一个对象(称为值)都要安排另一个对象(称为关键字)与之相关联。
比如,在Hashtable中可以存储多个国家的中文和英文名称,并且可以通过英文名称可以检索出对应的中文名称,这里的中文名称就是值,英文名称就是关键字。

要向Hashtable中存储数据,使用的Hashtable的put方法

Hashtable ht = new Hashtable();
ht.put("one",new Integer(1));


这个put方法接受两个参数,"one"为关健字对象,"new Integer(1)"为值对象。关键字和值对象都不能为null,而且Hashtable对象中不能有重复的关键字。

如果要从Hashtable中检索数据可以使用get方法,传递给get的参数就是关键字对象。通过关键字对象从而取出它在Hashtable中对应的值对象。

要想从Hashtable中成功的检索数据,用作这个Hashtable中关键字的类必须覆盖Object.hashCode方法和Object.equals方法。因为传递给get方法中的关键字对象需要与Hashtable中存储的关键字对象逐一的比较,看到底是取出哪个关键字所对应的值,这个判断的标准就是这两个关键字对象用equals方法进行比较的时候是否相同。另外一个要求它们的hashCode方法的返回值也必须相等。

下面来看一个例子:

public class MyKey {
    private String name = null;
    private int age = 0;
    public MyKey(String name,int age)//构造函数

    {
        this.name = name;
        this.age = age;
    }
    public boolean equals(Object obj)//覆盖equals方法

    {
        if(obj instanceof MyKey)//判断传递进来的对象是否是MyKey对象

        {
            MyKey objTemp = (MyKey)obj;//是MyKey对象,就把obj转换成MyKey对象

            if(name.equals(objTemp.name) && age==objTemp.age)//字符串的比较一定要用equals方法

            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
    public int hasCode()//覆盖hasCode方法

    {
        return name.hashCode() + age;
    }
    public String toString()//覆盖toString方法

    {
        return name + "," + age;
    }
}



import java.util.*;
public class HashtableTest {

    public static void main(String[] args) {
        Hashtable numbers = new Hashtable();
        numbers.put(new MyKey("zhenzhen",18),new Integer(1));
        numbers.put(new MyKey("kaikai",20),new Integer(2));
        numbers.put(new MyKey("zhongzhong",22),new Integer(3));
        
        Enumeration e = numbers.keys();//取出numbers里面的所有关键字的集合

        while(e.hasMoreElements())//如果还有关键字

        {
            MyKey key = (MyKey)e.nextElement();//取出所有关键字

            System.out.print(key+" = ");//打印所有关健字,其实是调用key.toString方法,所以必须在MyKey类中覆盖toString方法

            System.out.println(numbers.get(key));//打印所有关健字的值

        }
    }
}


输出为:

zhongzhong,22 = 3
kaikai,20 = 2
zhenzhen,18 = 1


这样就完成了检索Hashtable类中所有的集合

原创粉丝点击