HashMap<Integer,List<Integer>> test = new HashMap<Integer,ArrayList<Integer>>();
に変換することはできません。はなぜのHashMap <Integer型、ArrayListに<Integer>>この行は私にエラーを与えるのHashMap <Integer型、リスト<Integer>>
HashMap<Integer,List<Integer>> test = new HashMap<Integer,ArrayList<Integer>>();
に変換することはできません。はなぜのHashMap <Integer型、ArrayListに<Integer>>この行は私にエラーを与えるのHashMap <Integer型、リスト<Integer>>
基礎となるHashMap
はArrayList
に制限されますが、参照によって任意の種類のリストを追加することができます。 HashMap
にLinkedList
を追加しようとするとどうなりますか?
おそらく、あなただけのList
のHashMap
を行う必要があります。
HashMap<Integer, List<Integer>> test = new HashMap<Integer, List<Integer>>();
それとも、本当にそれだけでArrayList
の含まれていることを制限したい場合:問題は、この種のことを
HashMap<Integer, ArrayList<Integer>> test = new HashMap<Integer, ArrayList<Integer>>();
注意を共分散と反分散と呼ばれます。
関連項目:
このリンクは、JavaのかわりにC#のについてですが、私の知る概念の最良の説明の一つです。それは「安全でない」であるため、
は、それが動作しない、:それはJavaのそれは、C#にそうであるように同じように適用されませんが、それにもかかわらず、便利読まれるべきですそれは安全ではない理由は、あなたがこの2種類の同じリストには、2つの参照を保持することになるためであると:LinkedList<Integer>
を入力
HashMap<Integer,List<Integer>> a;
HashMap<Integer,ArrayList<Integer>> b;
ですからが将来の値を提示している場合、それを2 a
を追加して大丈夫だろうが、それLinkedList
はArrayList
ではないため、b
に追加することはできません。だから、のリファレンスをb
から作成すると、バックドアを作成して、マップの内容を参照の観点からb
に破損させます。 ArrayList
がLinkedList
ではなく、鋳造例外を発生させ得るでしょう期待しているb
から値を引っ張っライン誰かダウン例えば
。
Java 7+を使用していますか?ダイヤモンド演算子を使用します。.Map = new HashMap <>() ' –
html LeetcodeのオンラインJava環境を使用しているため、バージョンがわかりません。 – varimax
私はそれがJava 6で固まっているとは思わない –