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

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

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

    容器-Map-HashMap

    1.  HashMap概要:基于哈希表Map接口的非同步實現
    • 線程不安全,線程安全請使用Hashtable
    • 效率較好
    • 提供null作為key或者value

    2.  HashMap代碼詳解
    •     默認 初始化
                     /**
         * Constructs an empty <tt>HashMap</tt> with the default initial capacity
         * (16) and the default load factor (0.75).
         
    */
        
    public HashMap() {
            
    this.loadFactor = DEFAULT_LOAD_FACTOR;        //默認是0.75
            threshold 
    = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);//擴容的門檻,存入的數據大于該值,容量擴充一倍
            table 
    = new Entry[DEFAULT_INITIAL_CAPACITY];//初始化數組,數組內容為Entry,存儲鏈表    
            init();

    • 存入元素:
    public V put(K key, V value) {
            
    if (key == null)
                
    return putForNullKey(value);//如果key為null,直接把value放到數組第一位table[0]
            
    int hash = hash(key.hashCode());//通過可以的hashcode計算對應的hash值
            
    int i = indexFor(hash, table.length);//通過hash值,把entry對應到數組的位數計算出來
            
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {//如果該entry還包含下一個entry的引用,則繼續遍歷該鏈表            
                Object k;
    if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {//如果key相同,則替換新的value到制定的key
                    V oldValue 
    = e.value;
                    e.value 
    = value;
                    e.recordAccess(
    this);
                    
    return oldValue;
                }
            }

            modCount
    ++;
            addEntry(hash, key, value, i);
            
    return null;
        }

    • 讀取元素:
     public V get(Object key) {
            
    if (key == null)//key為null,直接從數組第一位拿數據
                
    return getForNullKey();
            
    int hash = hash(key.hashCode());
            
    for (Entry<K,V> e = table[indexFor(hash, table.length)];  //直接通過key的hashcode計算出對應到數組的索引位,直接取數據,如果有鏈表繼續查找
                 e 
    != null;
                 e 
    = e.next) {
                Object k;
                
    if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
                    
    return e.value;
            }
            
    return null;
        }



    • 總結:
            HashMap別的方法就不繼續詳解了,主要通過put與get可以很好的理解HashMap底層的結構,以及工作方式。








    posted on 2012-02-20 16:40 陳睿 閱讀(1067) 評論(0)  編輯  收藏 所屬分類: 高級

    導航

    <2012年2月>
    2930311234
    567891011
    12131415161718
    19202122232425
    26272829123
    45678910

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久久久亚洲av毛片大| 免费看国产曰批40分钟| 亚洲成Av人片乱码色午夜| 国产成人1024精品免费| 在线日韩日本国产亚洲| a级毛片免费观看在线| 亚洲精品在线视频| 精品国产免费人成网站| 亚洲乱码国产乱码精品精| 国产日韩AV免费无码一区二区| 国产偷v国产偷v亚洲高清| 久久精品免费观看| 亚洲今日精彩视频| 91网站免费观看| 亚洲精品无码aⅴ中文字幕蜜桃| 好吊妞在线成人免费| 羞羞视频免费网站含羞草| 亚洲乱码中文字幕手机在线 | 日本亚洲欧洲免费天堂午夜看片女人员| 亚洲人AV永久一区二区三区久久| 中文字幕a∨在线乱码免费看| 亚洲色婷婷一区二区三区| 久久国产乱子伦精品免费看| 亚洲午夜电影在线观看高清| 狠狠久久永久免费观看| 日本高清不卡中文字幕免费| 精品国产亚洲一区二区三区| 91福利视频免费| 国产亚洲精品美女久久久久久下载| 久久精品亚洲福利| 精品女同一区二区三区免费站| 亚洲中文字幕一二三四区| 亚洲精品无码永久在线观看| 少妇人妻偷人精品免费视频 | 亚洲成人免费网站| 国产午夜免费福利红片| 成人网站免费看黄A站视频| 亚洲三级中文字幕| 久久亚洲AV永久无码精品| 亚洲成人免费电影| 男女作爱免费网站|