Java EnumMap Methods - Java 147

Java EnumMap Methods – Java 147

Java 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 這些方法的操作,提升開發效率,在應用上相當廣泛。

發佈留言