欢迎来到天天文库
浏览记录
ID:8143523
大小:24.76 KB
页数:8页
时间:2018-03-07
《java中的hashtable的实例讲解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、java中的hashtable的实例讲解f91Java中的Hashtable的用法:Java包含两个类,java.util.Hashtable和java.util.HashMap,它们提供了一个多种用途的hashtable机制。Hashtable和HashMap对象可以让你把一个key和一个value结合起来,并用put()方法把这对key/value输入到表中。然后你可以通过调用get()方法,把key作为参数来得到这个value(值)。只要满足两个基本的要求,key和value可以是任何对象
2、。注意,因为key和value必须是对象,所以原始类型(primitivetypes)必须通过运用诸如Integer(int)的方法转换成对象。下面是一段简单的示例代码:1.先创建一个hashtable,保存了1,2,3三个对象。Hashtablenumbers=newHashtable();numbers.put("one",newInteger(1));numbers.put("two",newInteger(2));numbers.put("three",newInteger(3));2.
3、查找Integern=(Integer)numbers.get("two");if(n!=null){System.out.println("two="+n);}为了将一个特定类的对象用做一个key,这个类必须提供两个方法,equals()和hashCode()。这两个方法在java.lang.Object中,所以所有的类都可以继承这两个方法;但是,这两个方法在Object类中的实现一般没什么用,所以你通常需要自己重载这两个方法。Equals()方法把它的对象同另一个对象进行比较,如果这两个对象
4、代表相同的信息,则返回true。该方法也查看并确保这两个对象属于相同的类。如果两个参照对象是完全一样的对象,Object.equals()返回true,这就说明了为什么这个方法通常不是很适合的原因。在大多数情况下,你需要一个方法来一个字段一个字段地进行比较,所以我们认为代表相同数据的不同对象是相等的。HashCode()方法通过运用对象的内容执行一个哈希函数来生成一个int值。Hashtable和HashMap用这个值来算出一对key/value位于哪个bucket(哈希元)(或列表)中。如果你
5、想创建一个hashtable,这个hashtable运用你自己定义的一个类的对象作为key,那么你应该确信这个类的equals()和hashCode()方法提供有用的值。首先查看你扩展的类,确定它的实现是否满足你的需求。如果没有,你应该重载方法。任何equals()方法的基本设计约束是,如果传递给它的对象属于同一个类,而且它的数据字段设定为表示同样数据的值,那么它就应该返回true。你也应该确信,如果传递一个空的参数给该方法,那么你的代码返回false:publicbooleanequals(O
6、bjecto){if((o==null)
7、
8、!(oinstanceofmyClass)){returnfalse;}}另外,在设计一个hashCode()方法时,应该记住一些规则。首先,该方法必须为一个特定的对象返回相同的值,而不管这个方法被调用了多少次(当然,只要对象的内容在调用之间没有改变,在将一个对象用做一个hashtable的key时,应该避免这一点)。第二,如果由你的equals()方法定义的两个对象是相等的,那么它们也必须生成相同的哈希码。第三,这更像是一个方针,而不是一个原则,你应
9、该设法设计方法,使它为不同的对象内容生成不同的结果。如果偶尔不同的对象正好生成了相同的哈希码,这也不要紧。但是,如果该方法只能返回范围在1到10的值,那么只能用10个列表,而不管在hashtable中有多少个列表。Hashtable和HashMapHashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现。也许最重要的不同是Hashtable的方法是同步的,而
10、HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了
此文档下载收益归作者所有