我想在Java中实例化Map<String, List<String>>
,
我试过
Map<String, List<String>> foo = new <String, List<String>>();
和
Map<String, List<String>> foo = new <String, ArrayList<String>>();
它们都不起作用。有没有人知道如何在Java中实例化这个地图?
答案 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>>();
等