在 Java 中实例化 map<String、List<String>>的方法

2022-09-04 05:15:33

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

我试过了

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

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

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


答案 1
new HashMap<String, List<String>>();

或者正如gparyani所评论的那样:

new HashMap<>(); // type inference

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

因此,获取一个列表,检查它是否为空。

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


答案 2

你忘了提到这门课。 这里是引用类型,是一个接口。 在 equals 的另一侧指定创建并分配给参照的对象的实际类型。MapHashMapfoo

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

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

从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>>();