web-dev-qa-db-ja.com

Java HashMap連想多次元配列は要素を作成または追加できません

JavaでこのHashMapの概念に頭を悩ませるために数時間を費やしましたが、それを理解することができません。多くのチュートリアルを見てきましたが、どれも対処していないようです私の正確な要件と私はそれを機能させることができません。

Java(または類似の))で連想多次元配列を作成して、文字列であるキーを使用して配列に保存したり、配列から取得したりできるようにしています。

これは私がPHPでそれを行う方法であり、私がやろうとしていることを最もよく説明しています:

//loop one - assign the names
myArray['en']['name'] = "english name";
myArray['fr']['name'] = "french name";
myArray['es']['name'] = "spanish name";

//loop two - assign the description
myArray['en']['desc'] = "english description";
myArray['fr']['desc'] = "french description";
myArray['es']['desc'] = "spanish description";

//loop three - assign the keywords
myArray['en']['keys'] = "english keywords";
myArray['fr']['keys'] = "french keywords";
myArray['es']['keys'] = "spanish keywords";

//later on in the code be able to retrive any value similar to this
english_name = myArray['en']['name'];
french_name = myArray['fr']['name'];
spanish_name = myArray['es']['name'];

これは私がJava=で試したものですが、機能していません:

HashMap<String, HashMap<String, String>> myArray = new HashMap<String, HashMap<String, String>>();

myArray.put("en" , put("name", "english name")); //gives me "cannot find symbol" at second put

myArray.put("en" , ("name", "english name")); //gives me "')' expected" after second comma

だから私はそれが欠けている単純なものだと確信していますが、これは非常にイライラするので指摘してください!

ありがとう

編集:

だからここに私が私が受け入れた答えをどのように実装したかに関するいくつかの作業コードがあります:

import Java.util.*;

HashMap<String, HashMap<String, String>> finalArray = new HashMap<String, HashMap<String, String>>();

String[] langArray = {"en","fr","de","no","es"};

//Initialize each language key ahead of time
for(String lang : langArray) { // foreach lang in langArray
  if (!finalArray.containsKey(lang)) {
    finalArray.put(lang, new HashMap<String, String>());
  }
}

//loop one - assign names
for(String lang : langArray) {
  String theName = lang + " name"; //go get the name from somewhere
  finalArray.get(lang).put("name", theName);
}

//loop two - assign description
for(String lang : langArray) {
  String theDesc = lang + " description"; //go get the description from somewhere
  finalArray.get(lang).put("desc", theDesc);
}

//loop three - assign keywords
for(String lang : langArray) {
  String theKeys = lang + " keywords"; //go get the keywords from somewhere
  finalArray.get(lang).put("keys", theKeys);
}

//display output
for(String lang : langArray) {
  System.out.println("LANGUAGE: " + lang);
  System.out.println(finalArray.get(lang).get("name"));
  System.out.println(finalArray.get(lang).get("desc"));
  System.out.println(finalArray.get(lang).get("keys"));
}

//example to retrieve/get values
String english_name = finalArray.get("en").get("name");
String french_desc = finalArray.get("fr").get("desc");
16
jsherk
HashMap<String, HashMap<String, String>> myArray = new HashMap<String, HashMap<String, String>>();

if (!myArray.containsKey("en")) {
    myArray.put("en", new HashMap<String, String>());
}
myArray.get("en").put("name", "english name");

Javaでは、オブジェクトをいつ作成するかを明示する必要があります。この場合、最初に、外側のHashMapのキー "en"の下にHashMapオブジェクトが既に格納されているかどうかを確認します。空ではありません。

次に、新しい値をそこに入れるには、最初に外側のHashMapからそれを取得し、次に新しい値を入れる必要があります。

21
Daniel Gabriel

残念ながら、Javaで生成されたマップを作成するための簡潔な構文はありません。手書きで書く必要があります。個別のヘルパーメソッドを使用すると、少し簡単になります。

HashMap<String, String> makeMap(String name, String desc, String keys) {
    HashMap<String, String> map = new HashMap<>();
    // Before Java 7, above must be: new HashMap<String, String>();
    map.put("name", name);
    map.put("desc", desc);
    map.put("keys", keys);
}

次に:

HashMap<String, HashMap<String, String>> myArray = new HashMap<>();
myArray.put("en",
    makeMap("english name", "english description", "english keywords"));
// etc.

あなたはそれを取得します:

english_name = myArray.get("en").get("name");
3
Ted Hopp
HashMap<String, HashMap<String, String>> myArray = new HashMap<String, HashMap<String, String>>();
HashMap<String, String> value = new HashMap<String, String>();
value.put("name", "English name");
value.put("desc", "English description");
value.put("keys", "English keywords");

myArray.put("en" , value);

value = new HashMap<String, String>();
value.put("name", "French name");
value.put("desc", "French description");
value.put("keys", "French keywords");

myArray.put("fr" , value);
3
Jerome
import Java.util.HashMap;
public class Main
{
    public static void main(String[] args) {
        // Creating array
        HashMap<String, HashMap<String, String>> myArray = new HashMap<String, HashMap<String, String>>();
        // Setting values
        for(int i=0; i<100;i++) {
            myArray.put("key1"+i, new HashMap<String, String>());
            myArray.get("key1"+i).put("key2"+i, "value"+i);
        }
        // Getting values
        for(int i=0; i<100; i++) {
        System.out.println(myArray.get("key1"+i).get("key2"+i));
        }
    }
}
0
dAv dEv