Java EnumMap
Java EnumMap
このチュートリアルでは、例を使用して Java EnumMap クラスとその操作について学習します。
EnumMap
Java コレクション フレームワークのクラスは、列挙型の要素のマップ実装を提供します。
EnumMap
で 、列挙要素はキーとして使用されます . Map インターフェースを実装します。
EnumMap
について学ぶ前に 、Java Enums について理解しておいてください。
EnumMap の作成
enum マップを作成するには、java.util.EnumMap
をインポートする必要があります。 最初にパッケージ。パッケージをインポートしたら、Java で enum マップを作成する方法を次に示します。
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
上記の例では、sizes という名前の列挙マップを作成しました。 .
ここで、
- サイズ - 鍵 値にマップする列挙型の
- 整数 - 値 対応するキーに関連付けられた列挙型マップの
EnumMap のメソッド
EnumMap
クラスは、enum マップでさまざまな要素を実行できるようにするメソッドを提供します。
要素を EnumMap に挿入
put()
- 指定されたキー/値のマッピング (エントリ) を列挙型マップに挿入しますputAll()
- 指定されたマップのすべてのエントリをこのマップに挿入します
たとえば、
import java.util.EnumMap;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumMap of the Size enum
EnumMap<Size, Integer> sizes1 = new EnumMap<>(Size.class);
// Using the put() Method
sizes1.put(Size.SMALL, 28);
sizes1.put(Size.MEDIUM, 32);
System.out.println("EnumMap1: " + sizes1);
EnumMap<Size, Integer> sizes2 = new EnumMap<>(Size.class);
// Using the putAll() Method
sizes2.putAll(sizes1);
sizes2.put(Size.LARGE, 36);
System.out.println("EnumMap2: " + sizes2);
}
}
出力
EnumMap1: {SMALL=28, MEDIUM=32} EnumMap2: {SMALL=28, MEDIUM=32, LARGE=36}
上記の例では、putAll()
を使用しています。 列挙型マップ sizes1 のすべての要素を挿入するメソッド sizes2 の列挙型マップへ .
HashMap
などの他のマップから要素を挿入することも可能です 、 TreeMap
などを putAll()
を使用して列挙型マップに .ただし、すべてのマップは同じ列挙型である必要があります。
EnumMap 要素へのアクセス
<強い>1. entrySet()、keySet()、values() の使用
entrySet()
- enum マップのすべてのキー/値マッピング (エントリ) のセットを返しますkeySet()
- enum マップのすべてのキーのセットを返しますvalues()
- 列挙型マップのすべての値のセットを返します
たとえば、
import java.util.EnumMap;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumMap of the Size enum
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
sizes.put(Size.SMALL, 28);
sizes.put(Size.MEDIUM, 32);
sizes.put(Size.LARGE, 36);
sizes.put(Size.EXTRALARGE, 40);
System.out.println("EnumMap: " + sizes);
// Using the entrySet() Method
System.out.println("Key/Value mappings: " + sizes.entrySet());
// Using the keySet() Method
System.out.println("Keys: " + sizes.keySet());
// Using the values() Method
System.out.println("Values: " + sizes.values());
}
}
出力
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} Key/Value mappings: [SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40] Keys: [SMALL, MEDIUM, LARGE, EXTRALARGE] Values: [28, 32, 36, 40]
<強い>2. get() メソッドの使用
get()
メソッドは、指定されたキーに関連付けられた値を返します。 null
を返します 指定されたキーが見つからない場合。
たとえば、
import java.util.EnumMap;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumMap of the Size enum
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
sizes.put(Size.SMALL, 28);
sizes.put(Size.MEDIUM, 32);
sizes.put(Size.LARGE, 36);
sizes.put(Size.EXTRALARGE, 40);
System.out.println("EnumMap: " + sizes);
// Using the get() Method
int value = sizes.get(Size.MEDIUM);
System.out.println("Value of MEDIUM: " + value);
}
}
出力
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} Value of MEDIUM: 32
EnumMap 要素を削除
remove(key)
- 指定されたキーに関連付けられたエントリを返し、マップから削除しますremove(key, value)
- 指定されたキーが指定された値にマップされ、ブール値を返す場合にのみ、マップからエントリを削除します
たとえば、
import java.util.EnumMap;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumMap of the Size enum
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
sizes.put(Size.SMALL, 28);
sizes.put(Size.MEDIUM, 32);
sizes.put(Size.LARGE, 36);
sizes.put(Size.EXTRALARGE, 40);
System.out.println("EnumMap: " + sizes);
// Using the remove() Method
int value = sizes.remove(Size.MEDIUM);
System.out.println("Removed Value: " + value);
boolean result = sizes.remove(Size.SMALL, 28);
System.out.println("Is the entry {SMALL=28} removed? " + result);
System.out.println("Updated EnumMap: " + sizes);
}
}
出力
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} Removed Value: 32 Is the entry {SMALL=28} removed? True Updated EnumMap: {LARGE=36, EXTRALARGE=40}
EnumMap 要素を置換
replace(key, value)
- 指定された key に関連付けられた値を置き換えます 新しい値によってreplace(key, old, new)
- 古いを置き換えます new の値 古いの場合のみ値 値はすでに指定された key に関連付けられていますreplaceAll(function)
- マップの各値を指定された 関数 の結果に置き換えます
import java.util.EnumMap;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumMap of the Size enum
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
sizes.put(Size.SMALL, 28);
sizes.put(Size.MEDIUM, 32);
sizes.put(Size.LARGE, 36);
sizes.put(Size.EXTRALARGE, 40);
System.out.println("EnumMap: " + sizes);
// Using the replace() Method
sizes.replace(Size.MEDIUM, 30);
sizes.replace(Size.LARGE, 36, 34);
System.out.println("EnumMap using replace(): " + sizes);
// Using the replaceAll() Method
sizes.replaceAll((key, oldValue) -> oldValue + 3);
System.out.println("EnumMap using replaceAll(): " + sizes);
}
}
出力
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} EnumMap using replace(): {SMALL=28, MEDIUM=30, LARGE=34, EXTRALARGE=40} EnumMap using replaceAll(): {SMALL=31, MEDIUM=33, LARGE=37, EXTRALARGE=43}
上記のプログラムでは、ステートメントに注意してください
sizes.replaceAll((key, oldValue) -> oldValue + 3);
ここで、メソッドはマップのすべてのエントリにアクセスします。次に、すべての値をラムダ式によって提供される新しい値に置き換えます。
その他の方法
メソッド | 説明 |
---|---|
clone() | EnumMap のコピーを作成します |
containsKey() | EnumMap を検索します 指定されたキーに対して、ブール値の結果を返します |
containsValue() | EnumMap を検索します 指定された値に対して、ブール値の結果を返します |
size() | EnumMap のサイズを返します |
clear() | EnumMap からすべてのエントリを削除します |
EnumSet 対。 EnumMap
EnumSet と EnumMap
の両方 クラスは、列挙値を格納するためのデータ構造を提供します。ただし、それらの間にはいくつかの大きな違いがあります。
- 列挙型セットは内部的に一連のビットとして表されますが、列挙型マップは内部的に配列として表されます。
- 列挙型セットは、
allOf()
などの事前定義されたメソッドを使用して作成されます 、noneOf()
、of()
など。ただし、列挙型マップはそのコンストラクターを使用して作成されます。
クローン可能でシリアライズ可能なインターフェース
EnumMap
クラスは Cloneable
も実装しています と Serializable
クローン可能なインターフェース
EnumMap
を許可します クラスのインスタンスのコピーを作成するクラス。
シリアライズ可能なインターフェース
Java オブジェクトをネットワーク経由で送信する必要がある場合は常に、オブジェクトをビットまたはバイトに変換する必要があります。これは、Java オブジェクトをネットワーク経由で送信できないためです。
Serializable
インターフェイスにより、クラスをシリアル化できます。これは Serializable
を実装するクラスのオブジェクトを意味します ビットまたはバイトに変換できます。
Java