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

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

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

    posts - 10,comments - 2,trackbacks - 0
    1、盡可能的用位運算,比如HashMap的查找Entry<K, V> [] table下標的操作
    static int indexFor(int h, int length) {
        
    return h & (length-1);
    }

    2、對于java.utl.ArrayList、HashMap、LinkedHashMap、HashSet、LinkedSet等的new操作最好指定所需大小。
        2.1、對于ArrayList來說add操作有一行代碼為:ensureCapacity(size + 1);具體實現如下:
     1 public void ensureCapacity(int minCapacity) {
     2     modCount++;
     3     int oldCapacity = elementData.length;
     4     if (minCapacity > oldCapacity) {
     5         Object oldData[] = elementData;
     6         int newCapacity = (oldCapacity * 3)/2 + 1;
     7             if (newCapacity < minCapacity)
     8         newCapacity = minCapacity;
     9             // minCapacity is usually close to size, so this is a win:
    10             elementData = Arrays.copyOf(elementData, newCapacity);
    11     }
    12 }
        可以看出,如果ArrayList超出原先的容量,需要擴容的時候,是先new一個數組,然后把原來的數組拷貝到新數組中。所以如果原先可以確定容量的話,采用public ArrayList(int initialCapacity)構造方法。

        2.2、對于HashMap來說put操作,如果在原有的key中沒有找到匹配項,則需要把key加入到Entry<>[] table中。        具體代碼如下:
    1 void addEntry(int hash, K key, V value, int bucketIndex) {
    2     Entry<K,V> e = table[bucketIndex];
    3     table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
    4     if (size++ >= threshold)
    5         // 當size++ >= 負載因子時,進行擴容操作
    6         resize(2 * table.length);
    7 }
      resize(int newCapacity)代碼如下:
     1 void resize(int newCapacity) {
     2     Entry[] oldTable = table;
     3     int oldCapacity = oldTable.length;
     4     if (oldCapacity == MAXIMUM_CAPACITY) {
     5         threshold = Integer.MAX_VALUE;
     6         return;
     7     }
     8     // 需要重新new 一個Entry數組
     9     Entry[] newTable = new Entry[newCapacity];
    10     transfer(newTable);
    11     table = newTable;
    12     threshold = (int)(newCapacity * loadFactor);
    13 }
    這里調用一個方法transfer(Entry[] newTable)其代碼如下:
     1 void transfer(Entry[] newTable) {
     2     Entry[] src = table;
     3     int newCapacity = newTable.length;
     4     // 對Entry[] src進行循環,把舊的Entry[]拷貝到新的Entry[]中
     5     for (int j = 0; j < src.length; j++) {
     6         Entry<K,V> e = src[j];
     7         if (e != null) {
     8             // 把src賦值為null,為了GC操作的時候,回收原來的Entry[]
     9             src[j] = null;
    10             // 對table[j]的鏈表進行循環
    11             do {
    12                 Entry<K,V> next = e.next;
    13                 // 計算在新的Entry[]數組的下標
    14                 int i = indexFor(e.hash, newCapacity);
    15                 
    16                 e.next = newTable[i];
    17                 newTable[i] = e;
    18                 e = next;
    19             } while (e != null);
    20         }
    21     }
    22 }
        2.3、HashSet、LinkedSet、LinkedMap與上同

    3、數組復制的時候,用System.arraycopy方法,比如2.1中的ensureCapacity(int minCapacity)方法,調用的Arrays.copyOf方法。在Array.copy中調用了System.arraycopy,其代碼如下:
    1 public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
    2     T[] copy = ((Object)newType == (Object)Object[].class)
    3         ? (T[]) new Object[newLength]
    4         : (T[]) Array.newInstance(newType.getComponentType(), newLength);
    5     System.arraycopy(original, 0, copy, 0,
    6                      Math.min(original.length, newLength));
    7     return copy;
    8 }

    4、待更新
    posted on 2011-08-16 22:15 showsun 閱讀(704) 評論(0)  編輯  收藏 所屬分類: J2SE
    主站蜘蛛池模板: 两个人的视频高清在线观看免费| 午夜老司机永久免费看片| 又粗又大又黑又长的免费视频| 亚洲AV无码成人精品区天堂| 国产免费AV片在线观看| 久久亚洲综合色一区二区三区| 国产久爱免费精品视频| 亚洲日韩精品无码一区二区三区 | 国产乱辈通伦影片在线播放亚洲| 男男gay做爽爽的视频免费| 又粗又黄又猛又爽大片免费 | 国产精品国产亚洲区艳妇糸列短篇| 午夜老司机免费视频| 亚洲av综合日韩| 亚洲AV永久无码精品一区二区国产 | 2020久久精品国产免费| 亚洲人成电影网站色| 全部免费国产潢色一级| 成av免费大片黄在线观看| 亚洲成a人片在线观看日本| 在线观看免费视频资源| 亚洲性无码AV中文字幕| 亚洲 综合 国产 欧洲 丝袜 | 16女性下面无遮挡免费| 亚洲无吗在线视频| 国产不卡免费视频| 最近免费中文字幕MV在线视频3| 久久亚洲精品中文字幕| 免费无码成人AV片在线在线播放| 污污视频网站免费观看| 亚洲午夜未满十八勿入| 成全视频免费高清 | 免费观看的毛片手机视频| 特黄特色大片免费| 亚洲精品综合久久中文字幕| 精品国产精品久久一区免费式| 国产无限免费观看黄网站| 亚洲精品在线播放| 亚洲日韩在线第一页| 67194国产精品免费观看| 特级毛片免费播放|