13

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

我试过了

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

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

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

4

3 回答 3

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

或者正如 gparyani 评论的那样:

new HashMap<>(); // type inference

注意:需要为每个条目提供一个实例化的 List 作为值。你不能 get("myKey").add("some_string_for_this_key"); 第一次从它 get() 一个 List 。

所以,获取一个列表,检查它是否为空。

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

于 2013-08-13T22:41:23.610 回答
16

你忘了提到班级。Map这是引用类型,是一个InterfaceHashMap在 equals 的另一边,指定了创建并分配给引用的Object的实际类型。foo

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

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

从 Java 7 开始,您可以使用简写形式,例如

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

推荐您的第二种实例化方式。坚持使用Listwhich is an Interface

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

// Use List interface type instead
new TreeMap<String, List<String>>();
于 2013-08-13T22:41:50.213 回答
6

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

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

或者

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

等等

于 2013-08-13T22:42:09.673 回答