Ассоциативные массивы и Java

Я столкнулся с той же проблемой, с которой многие люди, кажется, сталкиваются при работе с PHP, отсутствием достойного и простого в использовании решения для ассоциативного массива. Я читал здесь вопросы, в которых в основном предлагалось использовать HashMap, например этот Q: Ассоциативный массив Java

Однако я не думаю, что упомянутые решения решат мою проблему. Я объясню.

У меня есть список из 250 элементов (стран), для которых я хочу хранить данные. Данные имеют неопределенную длину, что означает, что они могут содержать несколько записей в «столбце», иногда нет записи, иногда 4 и так далее.

в PHP я мог бы просто сделать это:

$country_data = new array();
$country_data["nl"]["currency"] = "euro";
$country_data["nl"]["languages"] = "Dutch";
...
$country_data["us"]["currency"] = "US dollar";
$country_data["us"]["languages"] = array("English", "Spanish");

Так что иногда я хочу сохранить массив, иногда нет. Конечно, это может быть и массив с одной записью вместо строки, но я просто говорю.

Итак, вопрос в том, как хранить и извлекать массивы в массивах в HashMap? Я понимаю, что в значительной степени застрял с уродливым решением HashMap, но я все еще не понимаю, как это позволит мне хранить массивы, я уверен, что пропускаю что-то простое. Пример, основанный на моем, был бы великолепен!

ОБНОВЛЕНИЕ

Я решил использовать HashMaps для HashMaps. Причина этого заключается в том, что мне нужно иметь возможность легко контролировать все и при необходимости изменять несколько строк значений.И это гибко, я могу легко просто получить название страны на основе кода страны, языка, или я могу получить хэш-карту country_data, когда мне это нужно, или все названия стран и так далее.

public class iso_countries {  
    Map country_data        = new HashMap();
    Map country_name        = new HashMap();
    Map country_idd       = new HashMap();
    Map country_cid       = new HashMap();

    public iso_countries(){      
         country_name.put("nl",         "Netherlands");      
         country_idd.put("nl",      new String[]{"+31"});
         country_cid.put("nl",      new String[]{"#31#", "*31#"});
         setData(country_name, country_cid, country_idd);
         // 249 * 4 lines more and later...
    }//end method

    public void setData(Map country_name, Map country_cid, Map country_idd){
         country_data.put("name",   country_name);
         country_data.put("idd",    country_idd);
         country_data.put("cid",    country_cid);
    }//end method   

    public String getCountryName(String countryCode){
        String name     = country_name.get(countryCode);
        return name;
    }//end method

    public String[] getCountryIdd(String countryCode){
        String prefix[] = country_idd.get(countryCode);
        return prefix;
    }//end method

    public String[] getCountryCid(String countryCode){
        String cid[]    = country_cid.get(countryCode);
        return cid;
    }//end method
}//end class

10
задан Community 23 May 2017 в 12:06
поделиться