免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1100 | 回复: 0
打印 上一主题 下一主题

API:Hashtable类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-16 00:22 |只看该作者 |倒序浏览
Hashtable类:
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类中所有的集合。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/36711/showart_479047.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP