2009-11-06 34 views
25

Jakie jest najlepsze wdrożenie tej metody biblioteki ogólnego zastosowania?Proste puzzle Java Map

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

Kryteria oceniania tej zagadki, jak w większości zagadek kodowania, są w następującej kolejności:

  1. Kompletność
  2. Poprawność
  3. Wydajność
  4. Beauty
  5. Otrzymanie wkładu PayPal

EDIT:

Cóż, ponieważ został zamknięty, równie dobrze mogę pisać odpowiedź. Myślę, że jest to prawdopodobnie optymalny:

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

Sprytny prostym rozwiązaniem byłoby:

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

To nie przeznaczyć instancji, ale daje wdrożenie mapa trochę więcej okazji do zrobienia czegoś optymalny.

+0

"Istnieje co najmniej jedna najlepsza odpowiedź" - Nie, to jest ** jedna ** "najlepsza" odpowiedź z definicji ... – jjnguy

+0

Kevin, jeśli zamierzasz zadawać podobne pytania, musisz ustanowić lepsze reguły. W przeciwnym razie to naprawdę nie jest pytanie, na które można odpowiedzieć w wystarczający sposób. – jjnguy

+3

OK, próbuję. Zobacz edycję. Jestem ciekawy co do twojej najlepszej definicji. Jeśli cztery karty mojego układu pokerowego to 2 trefl, 3 trefl, as pik, asa kier, jaka jest najlepsza piąta karta jaką mogłem mieć? –

Odpowiedz

0

Przypuszczalnie to ma zwróci 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

Ups, naprawiono wpis, dziękuję. Chcemy wesprzeć wszystkie możliwe wartości "klucza" i "wartości". –

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

Czy użycie '&' zamiast '&&' było celowe? –

+0

Szczerze mówiąc, nie wiem ... Prosto skopiowałem go z usuniętej odpowiedzi. – jjnguy

+2

została usunięta odpowiedź? i skopiowałeś to? Jestem nieco zdezorientowany. W każdym razie wygląda to na poprawne, ale nie jest tak skuteczne, jak mogłoby być. –