Table of Contents
ToggleJava EnumMap Methods
當 key 是 enum 類別,可以使用 EnumMap 來進行操作,內部以一個非常緊湊的陣列儲存 value,並且根據 enum 類別的 key 直接定位到內部陣列的索引,並不需要計算 hashCode,不但效率最高,而且沒有額外的空間浪費,介紹常見的 put 、 get 、 clear 、 size 等方法,將資料存儲在鍵、值對中,可以通過另一種類型的索引訪問,當插入重複鍵時,會替換相應鍵的元素, EnumMap Java Methods 本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- map
| +- enummap
| +- EnumMapMethodsTest.java
單元測試
EnumMap Methods Java 提供新增、取得、修改、刪除等操作 Map 中的元素。
Fruit
EnumMap Methods Java 建立 Fruit enum 類別。
public enum Fruit {
GRAPE, KIWIFRUIT, LEMON,
EMPTY,
APPLE, BANANA, CHERRY
}
put
EnumMap Methods Java 建立一個 EnumMap ,增加三個元素。
@Test
public void put() {
int expectedSize = 3;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
System.out.println(map);
assertEquals(expectedSize, map.size());
}
{GRAPE=1, KIWIFRUIT=2, LEMON=3}
putIfAbsent
EnumMap Methods Java 建立一個 EnumMap ,當元素不存在時,新增元素。
@Test
public void putIfAbsent() {
int expectedSize = 3;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
Integer put = map.putIfAbsent(Fruit.LEMON, 3);
System.out.println(put);
assertNull(put);
System.out.println(map);
assertEquals(expectedSize, map.size());
}
null
{GRAPE=1, KIWIFRUIT=2, LEMON=3}
get
EnumMap Methods Java 建立一個 EnumMap ,內有三個元素,取得指定 Key 元素。
@Test
public void get() {
Integer expected = 2;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
Integer value = map.get(Fruit.KIWIFRUIT);
System.out.println(value);
assertEquals(expected, value);
}
2
getOrDefault
EnumMap Methods in Java 建立一個 EnumMap ,內有三個元素,取得指定 Key 元素,若不存在傳回預設值。
@Test
public void getOrDefault() {
Integer expected = -1;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
Integer value = map.getOrDefault(Fruit.EMPTY, -1);
System.out.println(value);
assertEquals(expected, value);
}
-1
update
EnumMap Methods in Java 建立一個 EnumMap ,內有三個元素,更新指定 Key 元素。
@Test
public void update() {
Integer expected = 10;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
System.out.println(map);
Integer put = map.put(Fruit.GRAPE, 10);
System.out.println(put);
assertEquals(1, put.intValue());
System.out.println(map);
assertEquals(expected, map.get(Fruit.GRAPE));
}
{GRAPE=1, KIWIFRUIT=2, LEMON=3}
1
{GRAPE=10, KIWIFRUIT=2, LEMON=3}
remove
EnumMap Methods in Java 建立一個 EnumMap ,內有三個元素,刪除指定 Key 元素。
@Test
public void remove() {
int expectedSize = 2;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
map.remove(Fruit.GRAPE);
System.out.println(map);
assertEquals(expectedSize, map.size());
}
{KIWIFRUIT=2, LEMON=3}
clear
EnumMap Methods in Java 建立一個 EnumMap ,內有三個元素,刪除所有元素。
@Test
public void clear() {
int expectedSize = 0;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
map.clear();
System.out.println(map);
assertEquals(expectedSize, map.size());
}
{}
size
EnumMap Methods in Java 建立一個 EnumMap ,內有三個元素,取得長度。
@Test
public void size() {
int expectedSize = 3;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
System.out.println(map.size());
assertEquals(expectedSize, map.size());
}
3
putAll
建立兩個 EnumMap ,內各有三個元素,合併成為一個 Map 。
@Test
public void putAll() {
int expectedSize = 6;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.APPLE, 1);
map.put(Fruit.BANANA, 2);
map.put(Fruit.CHERRY, 3);
Map<Fruit, Integer> map2 = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
map.putAll(map2);
System.out.println(map);
assertEquals(expectedSize, map.size());
}
{GRAPE=1, KIWIFRUIT=2, LEMON=3, APPLE=1, BANANA=2, CHERRY=3}
isEmpty
建立一個 EnumMap ,檢查是否為空 Map 。
@Test
public void isEmpty() {
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
System.out.println(map.isEmpty());
assertTrue(map.isEmpty());
map.put(Fruit.GRAPE, 4);
map.put(Fruit.KIWIFRUIT, 5);
map.put(Fruit.LEMON, 6);
System.out.println(map.isEmpty());
assertFalse(map.isEmpty());
}
true
false
EnumMapMethodsTest.java
EnumMap Methods in Java 新增單元測試,驗證 EnumMap Functions in Java 是否符合預期。
package org.ruoxue.java_147.map.enummap;
import static org.junit.Assert.*;
import java.util.EnumMap;
import java.util.Map;
import org.junit.Test;
public class EnumMapMethodsTest {
public enum Fruit {
GRAPE, KIWIFRUIT, LEMON,
EMPTY,
APPLE, BANANA, CHERRY
}
@Test
public void put() {
int expectedSize = 3;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
System.out.println(map);
assertEquals(expectedSize, map.size());
}
@Test
public void putIfAbsent() {
int expectedSize = 3;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
Integer put = map.putIfAbsent(Fruit.LEMON, 3);
System.out.println(put);
assertNull(put);
System.out.println(map);
assertEquals(expectedSize, map.size());
}
@Test
public void get() {
Integer expected = 2;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
Integer value = map.get(Fruit.KIWIFRUIT);
System.out.println(value);
assertEquals(expected, value);
}
@Test
public void getOrDefault() {
Integer expected = -1;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
Integer value = map.getOrDefault(Fruit.EMPTY, -1);
System.out.println(value);
assertEquals(expected, value);
}
@Test
public void update() {
Integer expected = 10;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
System.out.println(map);
Integer put = map.put(Fruit.GRAPE, 10);
System.out.println(put);
assertEquals(1, put.intValue());
System.out.println(map);
assertEquals(expected, map.get(Fruit.GRAPE));
}
@Test
public void remove() {
int expectedSize = 2;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
map.remove(Fruit.GRAPE);
System.out.println(map);
assertEquals(expectedSize, map.size());
}
@Test
public void clear() {
int expectedSize = 0;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
map.clear();
System.out.println(map);
assertEquals(expectedSize, map.size());
}
@Test
public void size() {
int expectedSize = 3;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
System.out.println(map.size());
assertEquals(expectedSize, map.size());
}
@Test
public void putAll() {
int expectedSize = 6;
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
map.put(Fruit.APPLE, 1);
map.put(Fruit.BANANA, 2);
map.put(Fruit.CHERRY, 3);
Map<Fruit, Integer> map2 = new EnumMap<>(Fruit.class);
map.put(Fruit.GRAPE, 1);
map.put(Fruit.KIWIFRUIT, 2);
map.put(Fruit.LEMON, 3);
map.putAll(map2);
System.out.println(map);
assertEquals(expectedSize, map.size());
}
@Test
public void isEmpty() {
Map<Fruit, Integer> map = new EnumMap<>(Fruit.class);
System.out.println(map.isEmpty());
assertTrue(map.isEmpty());
map.put(Fruit.GRAPE, 4);
map.put(Fruit.KIWIFRUIT, 5);
map.put(Fruit.LEMON, 6);
System.out.println(map.isEmpty());
assertFalse(map.isEmpty());
}
}
心得分享
EnumMap Functions in Java 提供 enum 類別作為鍵值,不允許儲存空鍵,但可以儲存空值,熟悉 EnumMap Methods in Java 這些方法的操作,提升開發效率,在應用上相當廣泛。