91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Java中的EnumMap

發布時間:2021-11-04 16:09:34 來源:億速云 閱讀:246 作者:iii 欄目:web開發

這篇文章主要講解了“怎么使用Java中的EnumMap”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么使用Java中的EnumMap”吧!

提到Java中集合Map,你可能常用的是HashMap/ConcurrentHashMap,但是當Map的key是枚舉類型時,是否想過使用EnumMap了?

那么當key是枚舉類型時,EnumMap和HashMap的區別是啥?

  • HashMap:使用Hash表存儲,底層是數組,數組中存的是entry對象,默認長度是16。也就說每次向Map中加入對象,首先根據key值計算hash值,然后根據數組長度放到合適的位置,當發生沖突時,使用"開鏈法",即在沖突位置加入鏈表;Java8在解決沖突時,又新增了紅黑樹的解決方案。總體來說,HashMap就是空間換時間的方式來提高訪問效率。但是假如我們已知key的所有值時,是否還有必要每次都要計算hash值,然后找位置,解決沖突,甚者擴容了...

  • EnumMap:既然已知了所有key,那么申請已知大小的數組,每次訪問時根據枚舉變量的ordinal值定位到數組的指定位置,存取即可,這樣是不是既高效,且不會浪費存儲中間。

下面就進入EnumMap的內部探秘吧

在這里小編建了一個前端學習交流扣扣群:132667127,我自己整理的最新的前端資料和高級開發教程,如果有想需要的,可以加群一起學習交流

主要成員:

public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
   implements java.io.Serializable, Cloneable {
// key值的枚舉類型
private final Class<K> keyType;

//根據key值的枚舉類型,會預先緩存所有的枚舉變量
private transient K[] keyUniverse;

/**
* 所有的vlaue值,數組的下標是枚舉變量的序號(ordinal)
* 數組的內容是map中枚舉變量對應的vlaue
*/
private transient Object[] vals;

//當前map的大小,
private transient int size = 0;
}

使用詳解:

假設預先定了這樣的Enum對象

public enum  WeekEnum {
   SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}

構造方法:

// 構造方法使用示例
EnumMap<WeekEnum, String> weekEnumMap = new EnumMap<>(WeekEnum.class);
// 會預先獲取所有的枚舉值,然后根據枚舉值的個數,創建相應大小的數組用來存放value
public EnumMap(Class<K> keyType) {
this.keyType = keyType;
keyUniverse = getKeyUniverse(keyType);
vals = new Object[keyUniverse.length];
}

put方法:

// 檢查枚舉值類型,然后根據key的序號,將value存入相應下標的數組
public V put(K key, V value) {
       typeCheck(key);

       int index = key.ordinal();
       Object oldValue = vals[index];
       vals[index] = maskNull(value);
       if (oldValue == null)
           size++;
       return unmaskNull(oldValue);
   }

get方法:

// 依然是先校驗key值類型,然后根據key的序號去數組的位置取值
public V get(Object key) {
 return (isValidKey(key) ?
         unmaskNull(vals[((Enum<?>)key).ordinal()]) : null);
}

感謝各位的閱讀,以上就是“怎么使用Java中的EnumMap”的內容了,經過本文的學習后,相信大家對怎么使用Java中的EnumMap這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海城市| 勃利县| 高陵县| 大田县| 和田县| 贵溪市| 甘谷县| 琼海市| 香港| 道孚县| 济南市| 高邮市| 东兰县| 体育| 南汇区| 双流县| 宁明县| 博客| 吴桥县| 太仆寺旗| 陆河县| 东莞市| 理塘县| 兴宁市| 鱼台县| 宁蒗| 乌什县| 惠水县| 温宿县| 丰县| 元阳县| 资中县| 南丰县| 怀仁县| 酒泉市| 庐江县| 吴忠市| 平阴县| 丰原市| 连江县| 咸宁市|