文字列から文字列へのマップを作成しようとしています。以下は私が試したものですが、どちらの方法も機能しません。どうしたの?
public class Data
{
private final Map<String, String> data = new HashMap<>();
data["John"] = "Taxi Driver";
data.put("John", "Taxi Driver");
}
文字列から文字列へのマップを作成しようとしています。以下は私が試したものですが、どちらの方法も機能しません。どうしたの?
public class Data
{
private final Map<String, String> data = new HashMap<>();
data["John"] = "Taxi Driver";
data.put("John", "Taxi Driver");
}
ここには 2 つの問題があります。
まず、[]
他の言語で使用できるように構文を使用することはできません。角括弧は Java の配列にのみ適用されるため、整数インデックスでのみ使用できます。
data.put
は正しいですが、これはステートメントであるため、メソッド ブロックに存在する必要があります。クラス レベルで存在できるのは、フィールド宣言だけです。すべてがメソッドのローカル スコープ内にある例を次に示します。
public class Data {
public static void main(String[] args) {
Map<String, String> data = new HashMap<String, String>();
data.put("John", "Taxi Driver");
data.put("Mark", "Professional Killer");
}
}
Map.of
マップをクラスの静的フィールドとして初期化する場合は、Java 9 以降を使用できます。
public class Data {
private static final Map<String, String> DATA = Map.of("John", "Taxi Driver");
}
Java 9 より前では、静的初期化ブロックを使用して同じことを実現できます。
public class Data {
private static final Map<String, String> DATA = new HashMap<>();
static {
DATA.put("John", "Taxi Driver");
}
}
コードにある 2 つのエラーは大きく異なります。
Map
最初の問題は、ステートメントなしでクラスの本体に初期化してデータを入力していることです。クラスの本体にstaticMap
とstatic {//TODO manipulate Map}
ステートメントを含めるか、メソッドまたはクラスのコンストラクターで Map を初期化して設定することができます。
Map
2 番目の問題は、 を構文的に のように扱うことができないarray
ため、ステートメントdata["John"] = "Taxi Driver";
を に置き換える必要があることdata.put("John", "Taxi Driver")
です。に "John" キーが既にある場合HashMap
、その値は "Taxi Driver" に置き換えられます。
このコードを試してください
HashMap<String, String> map = new HashMap<String, String>();
map.put("EmpID", EmpID);
map.put("UnChecked", "1");