实例化map <string,list <string =“”>&gt;的方法在Java中</string,>

时间:2013-08-13 22:40:39

标签: java list map generic-programming

我想在Java中实例化Map<String, List<String>>

我试过

Map<String, List<String>> foo = new <String, List<String>>();

Map<String, List<String>> foo = new <String, ArrayList<String>>();

它们都不起作用。有没有人知道如何在Java中实例化这个地图?

3 个答案:

答案 0 :(得分:23)

new HashMap<String, List<String>>();

或正如gparyani评论的那样:

new HashMap<>(); // type inference

注意:每个条目都需要被赋予一个实例化的List作为值。你不能得到(“myKey”)。add(“some_string_for_this_key”);你第一次从中得到一个List。

因此,获取一个List,检查它是否为null。

如果它为null,则创建一个新列表,将字符串添加到其中,然后将List放回。 如果它不是空的,可以添加它,或者做你想做的事。

答案 1 :(得分:14)

你忘了提这堂课。 Map这里是引用类型,是接口。 equals另一侧的HashMap指定 Object 实际类型,并将其分配给引用foo

Map<String, List<String>> foo = new HashMap<String, List<String>>();

指定的实际类型(此处HashMap)必须可分配到引用类型(此处为Map),即引用类型是接口< / em>,对象的类型必须实现它。并且,如果引用的类型是 Class ,则Object的类型必须是相同的或其子类型,即它从中扩展

从Java 7开始,您可以使用像

这样的简写
Map<String, List<String>> foo = new HashMap<>();

您的第二种实例化建议是。坚持使用List这是一个接口

// Don't bind your Map to ArrayList
new TreeMap<String, ArrayList<String>>();

// Use List interface type instead
new TreeMap<String, List<String>>();

答案 2 :(得分:5)

地图是一个界面。您必须告诉Java要实例化哪个具体的Map类。

Map<String, List<String>> foo = new HashMap<String, List<String>>();

Map<String, List<String>> foo = new TreeMap<String, List<String>>();