Java的HashMap的关联多维数组不能创建或添加元素 [英] Java HashMap associative multi dimensional array can not create or add elements

查看:699
本文介绍了Java的HashMap的关联多维数组不能创建或添加元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好了,所以我花了几个小时试图环绕在Java中一个HashMap的概念我的头,但我只是无法弄清楚。我看过很多教程,但似乎没有解决我的确切要求,我无法得到它的工作。

我试图用Java创建(或类似的东西)关联多维数组,这样我既可以节省往返阵列是字符串键检索。

这是我会怎么做它在PHP和它最拿手的事情,我试图做解释道:

  //循环中的一个 - 分配名字
myArray的['恩'] ['名'] =英文名;
myArray的['FR'] ['名'] =法文名字;
myArray的['上课'] ['名'] =西班牙名;//回路内 - 分配描述
myArray的['恩'] ['说明'] =英文说明;
myArray的['FR'] ['说明'] =法式说明;
myArray的['上课'] ['说明'] =西班牙的说明;//三个筋斗 - 分配关键字
myArray的['恩'] ['键'] =英文关键词
myArray的['FR'] ['键'] =法文关键词
myArray的['上课'] ['键'] =西班牙文关键词//后来在code能以检索与此类似的任何值
english_name = myArray的['恩'] ['名'];
french_name = myArray的['FR'] ['名'];
spanish_name = myArray的['上课'] ['名'];

这是我在Java的尝试,但它不工作:

 的HashMap<弦乐,HashMap的<字符串,字符串>> myArray的=新的HashMap<弦乐,HashMap的<字符串,字符串>>();myArray.put(恩,把(名,英文名)); //给了我第二次​​在放找不到符号myArray.put(EN,(名,英文名)); //给我')预计十二逗号后

所以,我相信它的简单的东西,我很想念,但请指出来,因为这是非常令人沮丧!

感谢

编辑:

因此​​,这里是我是如何实现我接受的答案一定的工作code:

 进口的java.util。*;HashMap的<弦乐,HashMap的<字符串,字符串>> finalArray =新的HashMap<弦乐,HashMap的<字符串,字符串>>();的String [] = langArray {EN,FR,德,没有,ES};//初始化每种语言的关键时间提前
对于(字符串郎咸平:langArray){//的foreach郎langArray
  如果(!finalArray.containsKey(郎)){
    finalArray.put(朗,新的HashMap<字符串,字符串>());
  }
}//循环中的一个 - 分配名称
对于(字符串郎咸平:langArray){
  字符串theName =郎+名; //去从什么地方获取名称
  finalArray.get(郎)。把(名,theName);
}//回路内 - 分配描述
对于(字符串郎咸平:langArray){
  字符串theDesc =郎+说明; //去从什么地方得到的说明
  finalArray.get(郎)。把(DESC,theDesc);
}//三个筋斗 - 指定关键字
对于(字符串郎咸平:langArray){
  字符串theKeys =郎+关键词; //去从什么地方得到的关键字
  finalArray.get(郎)。把(钥匙,theKeys);
}//显示输出
对于(字符串郎咸平:langArray){
  的System.out.println(语言:+ LANG);
  的System.out.println(finalArray.get(朗)获得(名字));
  的System.out.println(finalArray.get(朗)获得(DESC));
  的System.out.println(finalArray.get(朗)获得(钥匙));
}//例如检索/获取值
。字符串english_name = finalArray.get(EN)获得(名称);
。字符串french_desc = finalArray.get(FR)获得(DESC);


解决方案

 的HashMap<弦乐,HashMap的<字符串,字符串>> myArray的=新的HashMap<弦乐,HashMap的<字符串,字符串>>();如果(!myArray.containsKey(EN)){
    myArray.put(EN,新的HashMap<字符串,字符串>());
}
。myArray.get(EN)把(名,英文名);

在Java中,你必须要明确,当你创建了一个对象。在这种情况下,我们首先检查是否已经有储存在我们的外的HashMap 下的键EN一个的HashMap 对象。如果没有,我们创建一个空的。

现在把一个新的价值到它,我们必须首先从外的HashMap ,然后把新的价值得到它。

Okay so I have spent several hours trying to wrap my head around this concept of a HashMap in Java but am just not able to figure it out. I have looked at many tutorials but none seem to address my exact requirement and I cannot get it to work.

I am trying to create an associative multi dimensional array in Java (or something similar) so that I can both save to and retrieve from the array with keys that are Strings.

This is how I would do it in PHP and explains it best what I am trying to do:

//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'];

This is what I tried in Java but it is not working:

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

So I am sure its something simple that I am missing but please point it out because this is very frustrating!

Thanks

EDIT:

So here is some working code on how I implemented the answer I accepted:

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");

In Java you have to be explicit about when you are creating an object. In this case first we check if there is already a HashMap object stored in our outer HashMap under the key "en". If not, we create an empty one.

Now to put a new value into it we have to first get it from the outer HashMap, then put the new value.

这篇关于Java的HashMap的关联多维数组不能创建或添加元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆