java中的hashtable的實(shí)例講解

java中的hashtable的實(shí)例講解

ID:8143523

大?。?4.76 KB

頁數(shù):8頁

時間:2018-03-07

java中的hashtable的實(shí)例講解_第1頁
java中的hashtable的實(shí)例講解_第2頁
java中的hashtable的實(shí)例講解_第3頁
java中的hashtable的實(shí)例講解_第4頁
java中的hashtable的實(shí)例講解_第5頁
資源描述:

《java中的hashtable的實(shí)例講解》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、java中的hashtable的實(shí)例講解f91Java中的Hashtable的用法:Java包含兩個類,java.util.Hashtable和java.util.HashMap,它們提供了一個多種用途的hashtable機(jī)制。Hashtable和HashMap對象可以讓你把一個key和一個value結(jié)合起來,并用put()方法把這對key/value輸入到表中。然后你可以通過調(diào)用get()方法,把key作為參數(shù)來得到這個value(值)。只要滿足兩個基本的要求,key和value可以是任何對象

2、。注意,因?yàn)閗ey和value必須是對象,所以原始類型(primitivetypes)必須通過運(yùn)用諸如Integer(int)的方法轉(zhuǎn)換成對象。下面是一段簡單的示例代碼:1.先創(chuàng)建一個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類中的實(shí)現(xiàn)一般沒什么用,所以你通常需要自己重載這兩個方法。Equals()方法把它的對象同另一個對象進(jìn)行比較,如果這兩個對象

4、代表相同的信息,則返回true。該方法也查看并確保這兩個對象屬于相同的類。如果兩個參照對象是完全一樣的對象,Object.equals()返回true,這就說明了為什么這個方法通常不是很適合的原因。在大多數(shù)情況下,你需要一個方法來一個字段一個字段地進(jìn)行比較,所以我們認(rèn)為代表相同數(shù)據(jù)的不同對象是相等的。HashCode()方法通過運(yùn)用對象的內(nèi)容執(zhí)行一個哈希函數(shù)來生成一個int值。Hashtable和HashMap用這個值來算出一對key/value位于哪個bucket(哈希元)(或列表)中。如果你

5、想創(chuàng)建一個hashtable,這個hashtable運(yùn)用你自己定義的一個類的對象作為key,那么你應(yīng)該確信這個類的equals()和hashCode()方法提供有用的值。首先查看你擴(kuò)展的類,確定它的實(shí)現(xiàn)是否滿足你的需求。如果沒有,你應(yīng)該重載方法。任何equals()方法的基本設(shè)計(jì)約束是,如果傳遞給它的對象屬于同一個類,而且它的數(shù)據(jù)字段設(shè)定為表示同樣數(shù)據(jù)的值,那么它就應(yīng)該返回true。你也應(yīng)該確信,如果傳遞一個空的參數(shù)給該方法,那么你的代碼返回false:publicbooleanequals(O

6、bjecto){if((o==null)

7、

8、!(oinstanceofmyClass)){returnfalse;}}另外,在設(shè)計(jì)一個hashCode()方法時,應(yīng)該記住一些規(guī)則。首先,該方法必須為一個特定的對象返回相同的值,而不管這個方法被調(diào)用了多少次(當(dāng)然,只要對象的內(nèi)容在調(diào)用之間沒有改變,在將一個對象用做一個hashtable的key時,應(yīng)該避免這一點(diǎn))。第二,如果由你的equals()方法定義的兩個對象是相等的,那么它們也必須生成相同的哈希碼。第三,這更像是一個方針,而不是一個原則,你應(yīng)

9、該設(shè)法設(shè)計(jì)方法,使它為不同的對象內(nèi)容生成不同的結(jié)果。如果偶爾不同的對象正好生成了相同的哈希碼,這也不要緊。但是,如果該方法只能返回范圍在1到10的值,那么只能用10個列表,而不管在hashtable中有多少個列表。Hashtable和HashMapHashtable和HashMap類有三個重要的不同之處。第一個不同主要是歷史原因。Hashtable是基于陳舊的Dictionary類的,HashMap是Java1.2引進(jìn)的Map接口的一個實(shí)現(xiàn)。也許最重要的不同是Hashtable的方法是同步的,而

10、HashMap的方法不是。這就意味著,雖然你可以不用采取任何特殊的行為就可以在一個多線程的應(yīng)用程序中用一個Hashtable,但你必須同樣地為一個HashMap提供外同步。一個方便的方法就是利用Collections類的靜態(tài)的synchronizedMap()方法,它創(chuàng)建一個線程安全的Map對象,并把它作為一個封裝的對象來返回。這個對象的方法可以讓你同步訪問潛在的HashMap。這么做的結(jié)果就是當(dāng)你不需要同步時,你不能切斷Hashtable中的同步(比如在一個單線程的應(yīng)用程序中),而且同步增加了

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。