2009-11-06 32 views
25

這種通用庫方法的最佳實現是什麼?簡單的Java地圖拼圖

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

判定基準這一難題,與大多數編碼拼圖,按此順序:

  1. 完整性
  2. 正確性
  3. 性能
  4. 美容
  5. 的貝寶捐款收據

編輯:

好,因爲它得到關閉,我還不如後回答。我想這大概是最理想的:

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

一個聰明的簡單的解決辦法是:

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

它分配一個實例,但它給人的地圖實現多一點機會做一些優化。

+0

「至少有一個最好的答案」 - 不,根據定義,** 1是最好的答案...... – jjnguy 2009-11-06 05:15:40

+0

凱文,如果你打算提出類似的問題,你需要制定一些更好的規則。否則,這真的不是一個可以得到充分回答的問題。 – jjnguy 2009-11-06 05:19:45

+3

好吧,我正在嘗試。請參閱編輯。 雖然我很好奇你最好的定義。如果我的撲克牌的四張牌是2個俱樂部,3個俱樂部,黑桃王牌,心中的王牌,我可以擁有的最好的第五張牌是什麼? – 2009-11-06 05:36:14

回答

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'的所有可能值。 – 2009-11-06 06:12:00

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

使用'&'而不是'&&'故意嗎? – 2009-11-06 05:46:26

+0

說實話,我不知道......我直接從刪除的答案中複製它。 – jjnguy 2009-11-06 06:01:34

+2

有被刪除的答案?你複製了嗎?我有點困惑。無論如何,這看起來是正確的,但不是它可能的表現。 – 2009-11-06 06:13:48