<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接口的非同步實(shí)現(xiàn)
    • 線程不安全,線程安全請使用Hashtable
    • 效率較好
    • 提供null作為key或者value

    2.  HashMap代碼詳解
    •     默認(rèn) 初始化
                     /**
         * 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;        //默認(rèn)是0.75
            threshold 
    = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);//擴(kuò)容的門檻,存入的數(shù)據(jù)大于該值,容量擴(kuò)充一倍
            table 
    = new Entry[DEFAULT_INITIAL_CAPACITY];//初始化數(shù)組,數(shù)組內(nèi)容為Entry,存儲鏈表    
            init();

    • 存入元素:
    public V put(K key, V value) {
            
    if (key == null)
                
    return putForNullKey(value);//如果key為null,直接把value放到數(shù)組第一位table[0]
            
    int hash = hash(key.hashCode());//通過可以的hashcode計(jì)算對應(yīng)的hash值
            
    int i = indexFor(hash, table.length);//通過hash值,把entry對應(yīng)到數(shù)組的位數(shù)計(jì)算出來
            
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {//如果該entry還包含下一個(gè)entry的引用,則繼續(xù)遍歷該鏈表            
                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,直接從數(shù)組第一位拿數(shù)據(jù)
                
    return getForNullKey();
            
    int hash = hash(key.hashCode());
            
    for (Entry<K,V> e = table[indexFor(hash, table.length)];  //直接通過key的hashcode計(jì)算出對應(yīng)到數(shù)組的索引位,直接取數(shù)據(jù),如果有鏈表繼續(xù)查找
                 e 
    != null;
                 e 
    = e.next) {
                Object k;
                
    if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
                    
    return e.value;
            }
            
    return null;
        }



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








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

    導(dǎo)航

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

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 足恋玩丝袜脚视频免费网站| 精品久久香蕉国产线看观看亚洲| 国产亚洲综合视频| 亚洲午夜久久久久妓女影院 | 伊人婷婷综合缴情亚洲五月| 3344永久在线观看视频免费首页| 性色av极品无码专区亚洲| 亚洲国产日韩视频观看| 久久亚洲AV成人出白浆无码国产| 亚洲人成无码网WWW| 免费一级毛片在级播放| 亚洲 自拍 另类小说综合图区| 国产男女性潮高清免费网站| 99国产精品永久免费视频 | 亚洲人成图片网站| 国产亚洲视频在线播放大全| 美女无遮挡拍拍拍免费视频| 成年人视频免费在线观看| 日本免费中文视频| 最近中文字幕免费mv在线视频 | 中文字幕亚洲综合久久菠萝蜜| 国产高清免费的视频| 国产成人无码免费视频97| 久久精品亚洲福利| 18gay台湾男同亚洲男同| 亚洲成a人片77777群色| 亚洲熟妇AV乱码在线观看| 日韩一区二区三区免费播放| 精品亚洲永久免费精品| 毛片a级毛片免费播放100| 中文字幕亚洲专区| 亚洲国产精品久久久久婷婷软件| 亚洲的天堂av无码| 精品久久久久久国产免费了| 日本最新免费网站| 亚洲乱码中文字幕手机在线| 亚洲视屏在线观看| 一级特黄色毛片免费看| 2020久久精品国产免费| 亚洲香蕉成人AV网站在线观看| 久久噜噜噜久久亚洲va久|