lesson6.6Hashtable使用

来源:互联网 发布:2kol怎么显示数据 编辑:程序博客网 时间:2024/06/05 10:41

Hashtable类是存储键值对的类

常用函数有

put(关键字对象,值对象);//添加键值对,若添加的关键字已经存在,则会覆盖原来的值

get(关键字对象);//由关键字对象返回值对象

keys();返回所有的关键字对象,返回Enurmeration对象,使用方法见lesson6.5


注意:用作关键字的类必须覆盖Object.hashCode()方法和Object.equals方法。

习题:编写可用作Hashtable关键字的类并使用。

import java.util.Enumeration;import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable;public class TestHashtable {public static void main(String [] args){Hashtable ht = new Hashtable();ht.put(new MyKey("zhangsan", 15), new Integer(1));ht.put(new MyKey("lisi", 20), new Integer(2));ht.put(new MyKey("wangwu", 25), new Integer(3));ht.put(new MyKey("zhaoliu", 30), new Integer(4));Enumeration e = ht.keys();//返回所有关键字对象,配合Enumeration类使用while(e.hasMoreElements()){MyKey mk = (MyKey)e.nextElement();System.out.print(mk);//直接打印一个类对象,会自动调用toString方法,要覆盖该方法,否则是一串乱码System.out.println("="+ht.get(mk));}System.out.println(new String("ax").hashCode()==new String("ax").hashCode());//这里只是实验相同字符串hashCode一样,String内容相同则占用同一块内存}}//写一个可用作Hashtable关键字的类class MyKey{String name;int age;MyKey(String name, int age){this.name = name;this.age = age;}//需要覆盖equals类和hashCode类,equals是判断两个对象内容是否相等,//hashCode返回散列码,是有对象在内存中的地址转换而来的,也是用来判断对象是否相同的public boolean equals(Object o)//这里的形参都是object,具体使用时还是要强制转换{if(o instanceof MyKey);//instanceof是一个运算符,用来判断对象是否属于某个类{MyKey mytmp = (MyKey)o;if(mytmp.name.equals(this.name) && mytmp.age==this.age){return true;}else{return false;}}}public int hashCode(){return name.hashCode()+age;//String类有hashCode方法,StringBuffer里没有哦!}public String toString(){return name+age;//为了打印时自动调用}}

有几个要注意的点:

String类有hashCode方法,直接调用就可以。
打印类对象会自动调用toString函数,可以按自己的要求覆盖打印想要的东西。

0 0
原创粉丝点击