2017-08-09 21 views
1
HashMap<Integer,List<Integer>> test = new HashMap<Integer,ArrayList<Integer>>(); 

に変換することはできません。はなぜのHashMap <Integer型、ArrayListに<Integer>>この行は私にエラーを与えるのHashMap <Integer型、リスト<Integer>>

+2

Java 7+を使用していますか?ダイヤモンド演算子を使用します。.Map = new HashMap <>() ' –

+0

html LeetcodeのオンラインJava環境を使用しているため、バージョンがわかりません。 – varimax

+0

私はそれがJava 6で固まっているとは思わない –

答えて

2

基礎となるHashMapArrayListに制限されますが、参照によって任意の種類のリストを追加することができます。 HashMapLinkedListを追加しようとするとどうなりますか?

おそらく、あなただけのListHashMapを行う必要があります。

HashMap<Integer, List<Integer>> test = new HashMap<Integer, List<Integer>>(); 

それとも、本当にそれだけでArrayListの含まれていることを制限したい場合:問題は、この種のことを

HashMap<Integer, ArrayList<Integer>> test = new HashMap<Integer, ArrayList<Integer>>(); 

注意を共分散と反分散と呼ばれます。

関連項目:

このリンクは、JavaのかわりにC#のについてですが、私の知る概念の最良の説明の一つです。それは「安全でない」であるため、

0

は、それが動作しない、:それはJavaのそれは、C#にそうであるように同じように適用されませんが、それにもかかわらず、便利読まれるべきですそれは安全ではない理由は、あなたがこの2種類の同じリストには、2つの参照を保持することになるためであると:LinkedList<Integer>を入力

HashMap<Integer,List<Integer>> a; 
HashMap<Integer,ArrayList<Integer>> b; 

ですからが将来の値を提示している場合、それを2 aを追加して大丈夫だろうが、それLinkedListArrayListではないため、bに追加することはできません。だから、のリファレンスをbから作成すると、バックドアを作成して、マップの内容を参照の観点からbに破損させます。 ArrayListLinkedListではなく、鋳造例外を発生させ得るでしょう期待しているbから値を引っ張っライン誰かダウン例えば

関連する問題