2009-11-06 12 views
25

この汎用ライブラリメソッドの最適な実装は何ですか?最もコーディングパズルのように、このパズルを判断するためのシンプルなJavaマップパズル

public static <K, V> boolean containsEntry(
    Map<K, V> map, K key, V value) {} 

基準は、この順序である:

  1. 完全性のPayPalの貢献
  2. 正しさ
  3. パフォーマンス
  4. 美容
  5. 領収書

EDIT:それが閉じてしまったので、

まあ、私も答えを投稿することがあります。

return map.entrySet().contains(
     new AbstractMap.SimpleImmutableEntry<K, V>(key, value)); 

それはインスタンスを割り当てないが、それは、最適な何かをするもう少し機会をマップの実装を提供します:

V valueForKey = map.get(key); 
    return (valueForKey == null) 
     ? value == null && map.containsKey(key) 
     : valueForKey.equals(value); 

巧妙な簡単な解決策は次のようになります。私は、これはおそらく最適だと思います。

+0

"は、少なくとも1つの最良の答えがあります。" - いいえ、** ** ** **最良の答えは、定義によると... – jjnguy

+0

ケビン、これに似た質問をするつもりなら、よりよい規則を敷く必要があります。さもなければ、これは十分に答えることができる質問ではありません。 – jjnguy

+3

さて、私は努力しています。編集を参照してください。 私はあなたの最高の定義について興味があります。私のポーカーハンドのカード4枚がクラブ2枚、クラブ3枚、スペードのエース、ハートのエース、私が持つことができる最高の5枚目のカードは何ですか? –

答えて

0

おそらくbooleanを返すためのものです:

public static <K, V> boolean containsEntry(Map<K, V> map, K key, V value) { 
    return map.containsKey(key) && map.get(key).equals(value); 
} 
+0

おっと、修正しました。 'key'と 'value'のすべての値をサポートしたいと考えています。 –

3
public static <K, V> boolean containsEntry(Map<K, V> map, K key, V value) { 
    returns map.containsKey(key) && isEqual(map.get(key), value); 
} 
private static boolean isEqual(Object a, Object b) { 
    return a == null ? a == b : a.equals(b); 
} 

Copied from deleted post.

+0

'&&'ではなく '&'を意図的に使用していましたか? –

+0

正直言って、わからない...私は削除された答えからそれをまっすぐにコピーしました。 – jjnguy

+2

削除された回答がありましたか?あなたはそれをコピーしましたか?私はちょっと混乱している。とにかく、これは正しいように見えますが、可能な限りパフォーマンスがありません。 –

関連する問題