Java HashMap关联多维数组无法创建或添加元素

标签 java arrays multidimensional-array 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");

最佳答案

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 对象存储在我们的外部 HashMap 中,在键“en”下。如果没有,我们创建一个空的。

现在要将新值放入其中,我们必须先从外部 HashMap 获取它,然后再放入新值。

关于Java HashMap关联多维数组无法创建或添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18326386/

相关文章:

Java MySQL 在删除行时更新行

java - 如何在二维数组中查找数字并排除一些?

C-将文本内容加载到二维数组中

c - 如何将 char* 分配给具有唯一条目的 char* 数组?

arrays - BigQuery 将列转换为 RECORD

c++ - Boost::Multiindex 与字符串索引 boost::unordered_map

java - 带有 spring-boot 和 DB2 数据库的 Java 应用程序的 SQL 结果限制

java - JTable 单元格数据

c++ - 如何对多维 std::vector 的所有元素求和?

php - 在 PHP 中使用多个条件对数组进行排序