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

Alf*_*ong 12 java list map generic-programming

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

我试过了

Map<String, List<String>> foo = new <String, List<String>>();
Run Code Online (Sandbox Code Playgroud)

Map<String, List<String>> foo = new <String, ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)

他们都没有工作.有没有人知道如何在Java中实例化这个地图?

Xab*_*ter 23

new HashMap<String, List<String>>();
Run Code Online (Sandbox Code Playgroud)

或者像gparyani评论的那样:

new HashMap<>(); // type inference
Run Code Online (Sandbox Code Playgroud)

注意:每个条目都需要以实例化的List作为值.你不能得到("myKey").add("some_string_for_this_key"); 你第一次从中得到一个List.

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

如果它为null,则创建一个新列表,将字符串添加到其中,然后将List放回.如果它只是null,添加到它,或做你想要的.


Rav*_*yal 14

你忘了提这堂课.Map这是引用类型,是一个接口.HashMap在equals的另一侧指定创建并分配给引用的Object实际类型.foo

Map<String, List<String>> foo = new HashMap<String, List<String>>();
Run Code Online (Sandbox Code Playgroud)

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

从Java 7开始,您可以使用类似的简写

Map<String, List<String>> foo = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

推荐您的第二种实例化方法.坚持使用List哪个接口.

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

// Use List interface type instead
new TreeMap<String, List<String>>();
Run Code Online (Sandbox Code Playgroud)


Wil*_*urn 5

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

Map<String, List<String>> foo = new HashMap<String, List<String>>();
Run Code Online (Sandbox Code Playgroud)

要么

Map<String, List<String>> foo = new TreeMap<String, List<String>>();
Run Code Online (Sandbox Code Playgroud)

等等