<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 陳睿 閱讀(1066) 評論(0)  編輯  收藏 所屬分類: 高級

    導航

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

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲aⅴ天堂av天堂无码麻豆| 亚洲日韩AV一区二区三区四区| 无遮挡国产高潮视频免费观看| 日韩成人在线免费视频| 亚洲日产乱码一二三区别| 精品无码国产污污污免费| 免费国产黄线在线观看| 亚洲免费在线观看视频| 手机在线毛片免费播放| 亚洲国产老鸭窝一区二区三区| 国产精品免费一区二区三区四区| 在线免费观看韩国a视频| 麻豆亚洲AV成人无码久久精品 | 亚洲色成人四虎在线观看| 一二三四在线播放免费观看中文版视频| 亚洲女人影院想要爱| 久久精品免费电影| 亚洲日韩乱码中文无码蜜桃| 国产精品视频免费一区二区| 久久无码av亚洲精品色午夜| 国产精品亚洲精品日韩已方| A级毛片高清免费视频在线播放| 亚洲爆乳无码一区二区三区| 8888四色奇米在线观看免费看| 区久久AAA片69亚洲| 牛牛在线精品观看免费正| 中文字幕不卡亚洲 | WWW免费视频在线观看播放| 亚洲情a成黄在线观看动漫尤物| 久久成人国产精品免费软件| 久久精品国产亚洲AV麻豆不卡| 国产成人免费高清激情明星| 亚洲日韩久久综合中文字幕| 亚洲JIZZJIZZ中国少妇中文| 久久亚洲色WWW成人欧美| 国产精品亚洲产品一区二区三区| 99re视频精品全部免费| 亚洲国产精品自在自线观看| 韩国欧洲一级毛片免费| a级午夜毛片免费一区二区| 亚洲一区二区三区四区视频|