2011-09-11 10 views
0

私は1つのメソッドcheckに2つのハッシュマップをパラメータとして持っています。これらのマップのキーはStringで、値はStringまたはArraylistです。ジェネリックHashMap

より良いソリューションです:

public static boolean check(HashMap<String, ?> map1, HashMap<String, ?> map2) { 
    for (entry <String, ? > entry : map1.entryset()) { 
     ... 
    } 
} 

または

public static <V> boolean check(HashMap<String, V> map1, HashMap<String, V> map2) { 
    for (entry <String, V > entry : map1.entryset()) { 
     ... 
    }  
} 

、なぜ?

また、これらの2つのソリューションの違いについて、さらに詳しい情報を教えてください。

答えて

5

最初に? coul dbe何でも。一方は<String, String>、他方は<String, Double>とすることができます。第2の選択肢では、それらは同じでなければならない。

これを比較できるように変換できるのであれば、最初のものを使用できます。たとえば、両方の値に.toString()を入力して比較することができます。しかし、個人的には、何が起こっているのかをより詳細に制御できるようになり、タイプのコンパイル時間チェックが可能になるので、2番目を好むでしょう。

0

2つ目のマップは、コンパイル時に、2つのマップが互いに同じパラメータ化されていることを強制します。また、非null要素を挿入するなど、マップに役立つ何かを行うこともできます(これはワイルドカードでは不可能です)。