[解決済み] HashMapを直接(リテラルに)初期化する方法は?
2022-03-19 17:02:20
質問
Java HashMapをこのように初期化する方法はありますか?
Map<String,String> test =
new HashMap<String, String>{"test":"test","test":"test"};
正しい構文は何でしょうか?これに関するものは見つかりませんでした。これは可能ですか?私は、決して変更されず、マップを作成するときにあらかじめ分かっているいくつかの "final/static"値をマップに入れるための最短/最速の方法を探しています。
解決方法は?
すべてのバージョン
万が一、1項目だけ必要な場合に備えて。次のようなものがあります。
Collections.singletonMap("key", "value")
.
Java Version 9以上用。
はい、現在では可能です。Java 9 では、マップの作成を簡単にするいくつかのファクトリーメソッドが追加されました。
// this works for up to 10 elements:
Map<String, String> test1 = Map.of(
"a", "b",
"c", "d"
);
// this works for any number of elements:
import static java.util.Map.entry;
Map<String, String> test2 = Map.ofEntries(
entry("a", "b"),
entry("c", "d")
);
上記の例では、両方の
test
と
test2
は、Mapの表現方法が異なるだけで、同じになります。その
Map.of
メソッドは、マップ内の最大10個の要素に対して定義されているのに対し
Map.ofEntries
メソッドには、そのような制限はありません。
この場合、生成されるマップはイミュータブルマップであることに注意してください。もしマップをミュータブルにしたければ、たとえば
mutableMap = new HashMap<>(Map.of("a", "b"));
Javaバージョン8まで対応。
いいえ、すべての要素を手動で追加する必要があります。無名サブクラスでイニシャライザーを使用すると、構文を少し短くすることができます。
Map<String, String> myMap = new HashMap<String, String>() {{
put("a", "b");
put("c", "d");
}};
しかし、匿名サブクラスは、場合によっては望ましくない振る舞いをもたらすかもしれません。これには例えば
- 追加のクラスが生成され、メモリ消費量、ディスク容量、起動時間が増加します。
- 非静的メソッドの場合。作成メソッドが呼び出されたオブジェクトへの参照を保持します。つまり、作成されたマップオブジェクトが参照されている間は、外部クラスのオブジェクトはガベージコレクションできないので、追加のメモリがブロックされます。
初期化に関数を使うと、イニシャライザでマップを生成することも可能になりますが、厄介な副作用を避けることができます。
Map<String, String> myMap = createMap();
private static Map<String, String> createMap() {
Map<String,String> myMap = new HashMap<String,String>();
myMap.put("a", "b");
myMap.put("c", "d");
return myMap;
}
関連
-
java の例外が発生しました java
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み】静的なMapを初期化する方法は?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Spring Boot による HTTPS アクセスの設定
-
プロジェクトの依存関係を解決できなかった 解決
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
linux run jarfile Invalid or corrupt jarfile error.
-
javaでよく使われる英単語
-
HttpClientがGZIP形式でない場合の対処法
-
IDEA パッケージステートメントの欠落
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。
-
ローカルリソースのロードが許可されていない場合の解決策