Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java HashMap associative multi dimensional array can not create or add elements

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");
like image 378
jsherk Avatar asked Aug 20 '13 03:08

jsherk


People also ask

Can a HashMap have an array?

There are at least two ways to implement hashmap: Array: Using a hash function to map a key to the array index value.

How do you create a multidimensional array in Java?

data_type[][][] array_name = new data_type[x][y][z]; For example: int[][][] arr = new int[10][20][30];

What is multidimensional associative array?

PHP Multidimensional array is used to store an array in contrast to constant values. Associative array stores the data in the form of key and value pairs where the key can be an integer or string. Multidimensional associative array is often used to store data in group relation.

Does Java support multidimensional arrays?

No, Java does not support multi-dimensional arrays. Java supports arrays of arrays. In Java, a two-dimensional array is nothing but, an array of one-dimensional arrays.

How to create associative array in Java?

In simple words, an associative array in java stores the set of elements in key, the value pair form an associative array is a collection of unique keys and collections of values where each key is associated with one value. To create achieve an associative array, we can use the hashMap built-in class of java, as we have seen above examples.

What is the difference between associative array and map?

So in simple word, a map uses to associate (link) a value with a key. With the associative array, we can assign the meaningful key to values for array elements and save more elements and assign the string as a key to an array’s elements.

What are multidimensional arrays in Java?

Multidimensional Arrays in Java. Array-Basics in Java Multidimensional Arrays can be defined in simple words as array of arrays. Data in multidimensional arrays are stored in tabular form (in row major order).

How to get the elements of a two-dimensional array in JavaScript?

We can also use a for loop inside another for loop to get the elements of a two-dimensional array (we still have to point to the two indexes): Insert the missing part to create a two-dimensional array.


2 Answers

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.

like image 92
Daniel Gabriel Avatar answered Nov 13 '22 08:11

Daniel Gabriel


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);
like image 37
Jerome Avatar answered Nov 13 '22 08:11

Jerome