<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    csusky

    常用鏈接

    統計

    最新評論

    HASHTABLE的內部實現

     

    public class TestHashtable {
        
    public static void main(String[] args){
            Hashtable ht 
    = new Hashtable();
            ht.put(
    "sichuan","chengdu"); //改變以下四行代碼的順序,可能會改變輸出內容的順序    
            ht.put("hunan","changsha");     
            ht.put(
    "beijing","beijing");    
            ht.put(
    "anhui","hefei");    
            
        Enumeration e 
    = ht.keys();
        
    while(e.hasMoreElements()) {
            Object key 
    = e.nextElement();
            Object value 
    = ht.get(key);            
            System.out.println(key 
    + " " + value + " " + key.hashCode() + " " + value.hashCode());
        }

            
        }

    }

     為了講述Hashtable鍵排序的問題,我們先來看Hashtable的結構圖:

    Hashtable.GIF

            從上面的結構圖可以看出,Hashtable的實質就是一個數組+鏈表。圖中的Entry就是鏈表的實現,Entry的結構中包含了對自己的另一個實例的引用next,用以指向另外一個Entry。而圖中標有數字的部分是一個Entry數組,數字就是這個Entry數組的index。那么往Hashtable增加鍵值對的時候,index會根據鍵的hashcode、Entry數組的長度共同決定,從而決定鍵值對存放在Entry數組的哪個位置。從這種意義來說,當鍵一定,Entry數組的長度一定的情況下,所得到的index肯定是相同的,也就是說插入順序應該不會影響輸出的順序才對。然而,還有一個重要的因素沒有考慮,就是計算index出現相同值的情況。譬如代碼中 "sichuan" 和 "anhui",所得到的index是相同的,在這個時候,Entry的鏈表功能就發揮作用了:put方法通過Entry的next屬性獲得對另外一個Entry的引用,然后將后來者放入其中。根據debug得出的結果,"sichuan", "anhui"的index同為2,"hunan"的index為6,"beijing"的index為1,在輸出的時候,會以index遞減的方式獲得鍵值對。很明顯,會改變的輸出順序只有"sichuan"和"anhui"了,也就是說輸出只有兩種可能:"hunan" - "sichuan" - "anhui" - "beijing"和"hunan" - "anhui" - "sichuan" - "beijing"。以下是運行了示例代碼之后,Hashtable的結果:

    Hashtable1.GIF

        
            以上的討論基于Java展開的,在C#中的Hashtable實現會有所不同,但是我相信兩者的設計應該是差不多的。感謝葉漂
    和quitgame,給了我思考的機會,也讓我感到了基礎知識的匱乏,看來是要補補基礎知識了。   

            [補充]:在Hashtable的實現代碼中,有一個名為rehash的方法用于擴充Hashtable的容量。很明顯,當rehash方法被調用
    以后,每一個鍵值對相應的index也會改變,也就等于將鍵值對重新排序了。這也是往不同容量的Hashtable放入相同的鍵值對會輸出不同的鍵值對序列的原因。在Java中,觸發rehash方法的條件很簡單:hahtable中的鍵值對超過某一閥值。默認情況下,該閥值等于hashtable中Entry數組的長度×0.75

    posted on 2008-02-19 11:07 曉宇 閱讀(1663) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 日韩免费在线视频| 亚洲午夜AV无码专区在线播放 | 在免费jizzjizz在线播| 免费观看的毛片手机视频| 亚洲综合国产一区二区三区| 亚洲字幕AV一区二区三区四区| 国产男女爽爽爽免费视频| 无码精品A∨在线观看免费| 亚洲午夜AV无码专区在线播放| 全黄A免费一级毛片| 无码永久免费AV网站| 亚洲成AV人片在线观看无码| 美景之屋4在线未删减免费 | 色www永久免费网站| 四虎影视精品永久免费网站| 亚洲精品美女久久久久| 中国在线观看免费的www| 日日夜夜精品免费视频| 亚洲喷奶水中文字幕电影| a成人毛片免费观看| 成人免费视频一区| 亚洲激情校园春色| 成年人性生活免费视频| 精品久久久久久亚洲中文字幕| 最新免费jlzzjlzz在线播放| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 久久久精品免费国产四虎| 亚洲国模精品一区| 高潮毛片无遮挡高清免费| 国产亚洲精品自在久久 | 最近免费字幕中文大全视频| 国产亚洲精品激情都市| 手机永久免费的AV在线电影网| 免费爱爱的视频太爽了| 人妻巨大乳hd免费看| 久久亚洲国产成人精品性色| A级毛片高清免费视频在线播放| 亚洲明星合成图综合区在线| 免费观看激色视频网站bd| 亚洲欧洲日本国产| 亚洲av无码乱码在线观看野外|