インスタンス化したいMap<String, List<String>>
Javaで
私は試した
Map<String, List<String>> foo = new <String, List<String>>();
そして
Map<String, List<String>> foo = new <String, ArrayList<String>>();
それらのどれも動作しません。このマップをJavaでインスタンス化する方法を知っている人はいますか?
new HashMap<String, List<String>>();
またはgparyaniがコメントしたように:
new HashMap<>(); // type inference
注:各エントリには、インスタンス化されたリストを値として指定する必要があります。 get( "myKey")。add( "some_string_for_this_key");はできません。初めてリストからget()するとき。
したがって、リストをフェッチし、それがnullかどうかを確認します。
Nullの場合、新しいリストを作成し、それに文字列を追加して、リストを元に戻します。 null以外の場合は、追加するか、必要な操作を行います。
クラスのことを忘れていました。 Map
ここは参照タイプであり、Interfaceです。等しいの反対側のHashMap
は、作成されて参照に割り当てられたObjectのactualタイプを指定します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>>();
地図はインターフェースです。 Javaインスタンス化する具体的なMapクラスを指定する必要があります。
Map<String, List<String>> foo = new HashMap<String, List<String>>();
または
Map<String, List<String>> foo = new TreeMap<String, List<String>>();
等.