<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接口的非同步實現(xiàn)
    • 線程不安全,線程安全請使用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);//擴容的門檻,存入的數(shù)據(jù)大于該值,容量擴充一倍
            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計算對應(yīng)的hash值
            
    int i = indexFor(hash, table.length);//通過hash值,把entry對應(yīng)到數(shù)組的位數(shù)計算出來
            
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {//如果該entry還包含下一個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計算出對應(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 陳睿 閱讀(1074) 評論(0)  編輯  收藏 所屬分類: 高級

    導(dǎo)航

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

    統(tǒng)計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一进一出60分钟免费视频| 久久精品国产亚洲AV电影 | 99re热精品视频国产免费| 亚洲人成色7777在线观看| 美女被羞羞网站免费下载| 永久黄网站色视频免费直播| 亚洲精品伦理熟女国产一区二区| 美女网站免费福利视频| 久久精品国产亚洲αv忘忧草 | 成人A级毛片免费观看AV网站| 亚洲第一页中文字幕| 91麻豆最新在线人成免费观看| 亚洲国产成人无码av在线播放| 国产91免费在线观看| 亚洲国产日韩综合久久精品| 最近中文字幕mv免费高清视频7| 亚洲日韩乱码中文字幕| 日本免费一区二区三区最新| 日韩成人精品日本亚洲| 中文字幕中韩乱码亚洲大片| 中文字幕在线视频免费观看| 亚洲免费精彩视频在线观看| 波多野结衣免费在线观看| 亚洲精品V天堂中文字幕| 亚洲精品黄色视频在线观看免费资源 | 青青在线久青草免费观看| 亚洲AV综合永久无码精品天堂| 国产免费午夜a无码v视频| 成人av片无码免费天天看| 久久亚洲精品人成综合网| 九九九精品成人免费视频| 免费无毒a网站在线观看| 亚洲AV美女一区二区三区| 成人看的午夜免费毛片| 一区二区视频免费观看| 亚洲理论片在线中文字幕| 国产老女人精品免费视频| a视频在线免费观看| 中文文字幕文字幕亚洲色| 亚洲免费一区二区| 1000部拍拍拍18免费网站|