日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入探究J2ME Hashtable實現(xiàn)原理

Hashtable實例有兩個參數(shù)影響其效率:容量和裝載因子。裝載因子在CLDC實現(xiàn)中始終是75%(而在其它版本中這個值是可以指定的)。當(dāng)Hashtable中包含的實體數(shù)超過裝載因子和當(dāng)前容量的一個結(jié)合值(這可能通過相應(yīng)的算法得出)時,就通過調(diào)用rehash方法來增加容量。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比磴口網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式磴口網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋磴口地區(qū)。費用合理售后完善,10年實體公司更值得信賴。

J2ME Hashtable的實現(xiàn)原理

首先看一下Hashtable的用法。

Hashtable有2個構(gòu)造函數(shù)

 
 
 
  1. publicHashtable(intinitialCapacity);//指定容量大小  
  2. publicHashtable(){  
  3. this(11);//默認(rèn)的容量是11,為什么是11,而不是10呢?  

Demo1

 
 
 
  1. HashtablesTable=newHashtable();  
  2. sTable.put("wuhua","wuhua");  
  3. sTable.remove("wuhua");  
  4. sTable.clear(); 

上面是簡單的用法。

Hashtable源代碼解讀

在了解源代碼之前,我們先來了解下一些java不常用的關(guān)鍵字。

transient

當(dāng)串行化某個對象時,如果該對象的某個變量是transient,那么這個變量不會被串行化進(jìn)去。也就是說,假設(shè)某個類的成員變量是transient,那么當(dāng)通過ObjectOutputStream把這個類的某個實例保存到磁盤上時,實際上transient變量的值是不會保存的。因為當(dāng)從磁盤中讀出這個對象的時候,對象的該變量會沒有被賦值。另外這篇文章還提到,當(dāng)從磁盤中讀出某個類的實例時,實際上并不會執(zhí)行這個類的構(gòu)造函數(shù),而是讀取這個類的實例的狀態(tài),并且把這個狀態(tài)付給這個類的對象。

Transient這個關(guān)鍵字很重要,來看下源代碼里面有幾處是用到這個關(guān)鍵字的。

 
 
 
  1. privatetransientHashtableEntrytable[];  
  2. privatetransientintcount; 

源代碼中只有上面兩個字段的定義是用到的,但是這兩個字段是用于存儲style="COLOR:#000000"target=_blank>存儲Hashtable的容器字段,因此可以說Hashtable是不允許序列化的。#p#

內(nèi)部類

Hashtable有2個內(nèi)部類

HashtableEntry--用于存放key-value,nextElement的類。

 
 
 
  1. classHashtableEntry{  
  2. inthash;  
  3. Objectkey;  
  4. Objectvalue;  
  5. HashtableEntrynext;  
  6. }  

HashtableEnumerator遍歷的枚舉類。

 
 
 
  1. classHashtableEnumeratorimplementsEnumeration{  
  2. booleankeys;  
  3. intindex;  
  4. HashtableEntrytable[];  
  5. HashtableEntryentry;  
  6.  
  7. HashtableEnumerator(HashtableEntrytable[],booleankeys){  
  8. this.table=table;  
  9. this.keys=keys;  
  10. this.index=table.length;  
  11. }  
  12.  
  13. publicbooleanhasMoreElements(){  
  14. if(entry!=null){  
  15. returntrue;  
  16. }  
  17. while(index-->0){  
  18. if((entry=table[index])!=null){  
  19. returntrue;  
  20. }  
  21. }  
  22. returnfalse;  
  23. }  
  24.  
  25. publicObjectnextElement(){  
  26. if(entry==null){  
  27. while((index-->0)&&((entry=table[index])==null));  
  28. }  
  29. if(entry!=null){  
  30. HashtableEntrye=entry;  
  31. eentry=e.next;  
  32. returnkeys?e.key:e.value;  
  33. }  
  34. thrownewNoSuchElementException(  
  35. /*#ifdefVERBOSE_EXCEPTIONS*/  
  36. ///skipped"HashtableEnumerator"  
  37. /*#endif*/  
  38. );  
  39. }  
  40. }  
  41.  

代碼寫的是相當(dāng)?shù)暮喗椤S幸恍┍容^技巧性的用法也是相當(dāng)?shù)牟诲e,比如:

 
 
 
  1. if(entry==null){  
  2. while((index-->0)&&((entry=table[index])==null));  
  3. }這段寫的是相當(dāng)?shù)暮茫梢娮髡叩墓α?,循環(huán)變量table  
  4. while(index-->0)  
  5. //循環(huán)變量,查看是否有下一個元素,  
  6. if((entry=table[index])!=null){  
  7. returntrue;  
  8. }  

了解了Hashtable的數(shù)據(jù)存放格式,我們看看存放的關(guān)鍵邏輯在put,remove,get方法中存在。

 
 
 
  1. intindex=(hash&0x7FFFFFFF)%tab.length;  
  2.  

這樣的函數(shù),這個函數(shù)的意義上,根據(jù)散列值來獲取對象的存儲位置。

【編輯推薦】

  1. J2ME數(shù)據(jù)結(jié)構(gòu)中Hashtable和Vector的使用
  2. 技術(shù)分享 用OTA下載本機(jī)J2ME程序至手機(jī)
  3. 解析J2ME各大應(yīng)用平臺環(huán)境
  4. MotorolaJ2ME開發(fā)時需要注意的幾個細(xì)節(jié)
  5. Java2平臺J2SE、J2EE、J2ME三大版本的區(qū)別

分享名稱:深入探究J2ME Hashtable實現(xiàn)原理
網(wǎng)站網(wǎng)址:http://www.dlmjj.cn/article/dphsceh.html