<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级特黄的片子视频免费| 亚洲国产日韩精品| 99视频在线精品免费| 猫咪社区免费资源在线观看 | 国产v片免费播放| 亚洲国产精品精华液| 影音先锋在线免费观看| 亚洲色婷婷六月亚洲婷婷6月| 一级毛片a女人刺激视频免费| 亚洲国产专区一区| 国产精品永久免费视频| 国产精品亚洲w码日韩中文| 二级毛片免费观看全程| 国产成人亚洲综合无码| 四虎国产精品免费永久在线| 亚洲AV永久纯肉无码精品动漫 | 国产一卡二卡3卡四卡免费| 亚洲最大福利视频| 免费观看一级毛片| 免费激情网站国产高清第一页| 亚洲精品tv久久久久| 中文字幕一区二区三区免费视频| 美女视频黄是免费的网址| 精品亚洲AV无码一区二区三区| 色播在线永久免费视频| 曰韩无码AV片免费播放不卡| 亚洲精品无码永久中文字幕| 在线成人爽a毛片免费软件| 在线观看亚洲AV每日更新无码| 国产精品极品美女免费观看| eeuss草民免费| 亚洲精品456在线播放| 永久黄网站色视频免费观看| 一级特级女人18毛片免费视频| 亚洲av中文无码乱人伦在线r▽ | 国产V片在线播放免费无码| 亚洲AV无码专区在线播放中文 | 国产一级做a爱免费视频| 拍拍拍无挡免费视频网站| 亚洲国产精品xo在线观看|