2009-11-06 5 views
25

이 범용 라이브러리 방법에 가장 적합한 구현은 무엇입니까? 대부분의 코딩 퍼즐로,이 퍼즐을 판단간단한 자바지도 퍼즐

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

기준이 순서에 있습니다

  1. 완전성 페이팔 기여
  2. 정확성
  3. 성능
  4. 뷰티
  5. 영수증

편집 : 닫혀있어 이후

음, 나뿐만 아니라 대답을 게시 할 수 있습니다.

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

". 적어도 하나의 정답이있다" - 아니오, ** ** ** ** ** 정의로 정의한 최상의 대답입니다. – jjnguy

+0

케빈, 이와 비슷한 질문을한다면 더 나은 규칙을 세워야합니다. 그렇지 않으면, 이것은 충분히 대답 할 수있는 질문이 아닙니다. – jjnguy

+3

좋아, 노력하고있어. 편집을 참조하십시오. 나는 당신의 정의에 대해 궁금해합니다. 내 포커 핸드 카드 4 개가 클럽 2 개, 클럽 3 개, 스페이드 에이스, 하트 에이스, 내가 가질 수있는 최고의 다섯 번째 카드는 무엇입니까? –

답변

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

삭제 된 답변이 있었습니까? 너 복사 했어? 나는 다소 혼란 스럽다. 어쨌든, 이것은 정확하지만 보이지는 않습니다. –