ps1:Listがインターフェイスであることを知っているので、そのタイプのオブジェクトをインスタンス化できません。
List<Map<String, String>> listMap = new ArrayList<Map<String, String>>();
あなたは正しいList
です、インターフェースなので、インターフェースをインスタンス化することはできません。インスタンス化するには、インターフェイスの実装クラスを使用する必要があります。ArrayList
インターフェイスの実装クラスでありList
、ableステートメントで使用されます。
ps2:listMapをArrayList型として宣言できます。それをリストとして宣言することの利点は何ですか。
いつでもArrayList
左側で使用できます。
ArrayList<Map<String, String>> listMap = new ArrayList<Map<String, String>>();
インターフェイスを使用する利点: クラス全体で変数オブジェクト(listMap)を使用する場合は、インターフェイスを型として使用する方が適切ですが、変数オブジェクト(lsitMap)をプログラム内でローカルに使用する場合は、存在しないと思います。追加の利点。
Map
ここで、これもインターフェイスであるについて考えます。Map
上記のステートメントでオブジェクトをインスタンス化していないことに注意してください。あなたはあなたのlistMap
リストがMap
タイプの要素を含むであろうと言っているだけです。
繰り返しますが、要素をインスタンス化してに追加しようとすると、次のようなインターフェイスlistMap
の実装クラスが必要になります。Map
HashMap
List<Map<String, String>> listMap = new ArrayList<Map<String, String>>();
Map<String, String> lsitMapElement1 = new HashMap<String, String>();
lsitMapElement1.put("key1", "value1");
listMap.add(lsitMapElement1 );
Map<String, String> lsitMapElement2 = new HashMap<String, String>();
lsitMapElement2.put("key2", "value2");
listMap.add(lsitMapElement2);
これが物事を明確にすることを願っています。