Java EnumMap工作原理及实现(二)
来源:互联网 发布:笑傲江湖知乎 编辑:程序博客网 时间:2024/05/29 02:15
1.概述
A specialized Map implementation for use with enum type keys. All of the keys in an enum map must come from a single enum type that is specified, explicitly or implicitly, when the map is created. Enum maps are represented internally as arrays. This representation is extremely compact and efficient.
EnumMap是是一种键为枚举类型的特殊的Map实现。所有的Key也必须是一种枚举类型,EnumMap是使用数组来实现的。
12345678
EnumMap<Course, String> map = new EnumMap<Course, String>(Course.class);map.put(Course.ONE, "语文");map.put(Course.ONE, "政治");map.put(Course.TWO, "数学");map.put(Course.THREE, "英语");for(Entry<Course, String> entry : map.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}
输出结果为:
123
ONE: 政治TWO: 数学THREE: 英语
其具体实现的结构如下图所示:
2. put和get方法
put方法通过key的ordinal将值存储到对应的地方,get方法则根据key的ordinal获取对应的值。
123456789101112131415161718
public V put(K key, V value) { // 类型检查 typeCheck(key); // 获取key的序号 int index = key.ordinal(); Object oldValue = vals[index]; // 赋值 vals[index] = maskNull(value); // 若之前的值为空,则size++ if (oldValue == null) size++; return unmaskNull(oldValue);}public V get(Object key) { return (isValidKey(key) ? unmaskNull(vals[((Enum<?>)key).ordinal()]) : null);}
3. 遍历
EnumMapIterator的迭代这样实现的:
123456789101112
public boolean hasNext() { while (index < vals.length && vals[index] == null) index++; return index != vals.length;}public Map.Entry<K,V> next() { if (!hasNext()) throw new NoSuchElementException(); lastReturnedEntry = new Entry(index++); return lastReturnedEntry;}
通过hasNext跳过空的数组,也就是说,保证了遍历顺序与Enum中key的先后顺序一致。
本文转载自:点击打开链接
参考资料
What is EnumMap in Java
0 0
- Java EnumMap工作原理及实现(二)
- Java EnumMap工作原理及实现(一)
- Java HashMap工作原理及实现(二)
- Java LinkedHashMap工作原理及实现(二)
- Java LinkedList工作原理及实现(二)
- Java TreeMap工作原理及实现(二)
- Java HashMap工作原理及实现
- Java HashMap工作原理及实现
- Java HashMap工作原理及实现
- Java HashMap工作原理及实现
- Java HashMap工作原理及实现
- Java LinkedHashMap工作原理及实现
- Java HashMap工作原理及实现
- Java HashMap工作原理及实现
- Java ArrayList工作原理及实现
- Java ArrayList工作原理及实现
- Java HashMap工作原理及实现(一)
- Java LinkedHashMap工作原理及实现(一)
- Android自定义控件(含简单栗子)
- 第12周-项目1(3)
- Java序列化与反序列化
- EXC_BAD_ACCESS on UIAlertview code=1
- JS调试必备的5个debug技巧
- Java EnumMap工作原理及实现(二)
- 【数据结构】 栈和队列 YTU 2241: 相同序列(栈和队列)
- LoadRunner调用Dll
- 【leetcode】8. String to Integer (atoi)
- 深入理解Android事件分发机制
- android webView使用js/css实现夜间模式 长按识别图片以及二维码,网页可以上传图片
- Android Volley 详解 Google发布的一套用于网络通信的工具库
- MySQL多表SQL查询
- wr741n wr841n openwrt ,AR9331/AR9341网口修正方法