我遇到了同样的问题,很多人似乎都面对来自PHP的问题,因为缺少一个体面且易于使用的关联数组解决方案。
我在这里阅读了所有基本上都建议使用HashMap的问题,例如Q:Java associative-array

但是,我认为上述解决方案不能解决我的问题。我会解释。

我有一个包含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 HashMap或所有国家名称等。
public class iso_countries {
    Map<String, Object> country_data        = new HashMap<String, Object>();
    Map<String, String> country_name        = new HashMap<String, String>();
    Map<String, String[]> country_idd       = new HashMap<String, String[]>();
    Map<String, String[]> country_cid       = new HashMap<String, String[]>();

    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

最佳答案

您可以将数组存储为HashMap的值:

HashMap<Integer,String[]> hm = new HashMap<Integer,String[]>();
hm.put( 1, new String[]{ "a", "b" } );

至于“多维”键,您总是可以将它们与一个类包装在一起。另一个解决方案(尽管很丑)将是HashMapHashMap

关于java - 关联数组和Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10856397/

10-16 00:51