web-dev-qa-db-ja.com

Javaでmap <String、List <String >>をインスタンス化する方法

インスタンス化したいMap<String, List<String>> Javaで

私は試した

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

そして

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

それらのどれも動作しません。このマップをJavaでインスタンス化する方法を知っている人はいますか?

12
Alfred Zhong
new HashMap<String, List<String>>();

またはgparyaniがコメントしたように:

new HashMap<>(); // type inference

注:各エントリには、インスタンス化されたリストを値として指定する必要があります。 get( "myKey")。add( "some_string_for_this_key");はできません。初めてリストからget()するとき。

したがって、リストをフェッチし、それがnullかどうかを確認します。

Nullの場合、新しいリストを作成し、それに文字列を追加して、リストを元に戻します。 null以外の場合は、追加するか、必要な操作を行います。

23
Xabster

クラスのことを忘れていました。 Mapここは参照タイプであり、Interfaceです。等しいの反対側のHashMapは、作成されて参照に割り当てられたObjectactualタイプを指定しますfoo

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

指定された実際のタイプ(HashMap here)は、参照タイプ(Map here)に対してassignableでなければなりません。つまり、参照のタイプがインターフェース、オブジェクトのタイプはそれを実装する必要があります。また、参照のタイプがClassの場合、オブジェクトのタイプは同じclassまたはそのsubtypeつまり、それから拡張されます。

Java 7以降では、次のような省略形を使用できます

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

インスタンス化の2番目の方法はnotです。 InterfaceであるListの使用に固執します。

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

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

地図はインターフェースです。 Javaインスタンス化する具体的なMapクラスを指定する必要があります。

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

または

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

等.

5