2013-03-31 4 views
8

itemitem set에 있는지 확인하고 싶습니다.파이썬과 동등한 자바 'in'- 회원 자격 테스트를 위해서?

나는 자바에서이 작업을 수행 할 :

def is_item_in_set(item, item_set): 
    if item in item_set: 
     return true 
    else: 
     return false 

(.. 내 파이썬이 파이썬되지 않은 경우 그냥 내 의도를 전달하고 싶었 사과가)

내가 관리 한 기록이 :

boolean isItemInSet(String item, String[] itemSet) { 
    for(int i =0; i < itemSet.length; ++i) { 
     if(item.equals(itemSet[i])) { 
      return true; 
     } 
    } 
    return false; 
} 

더 좋은 방법이 있습니까? 회원 자격 Java의?

+0

두 코드는 동일하지 않습니다. – Cairnarvon

+0

그들은 지금입니까? '.contains() '를 참조 했습니까? 나는 그것을 .equals()로 대체했다. –

+4

파이썬에는 안티 패턴이 있습니다. 왜'item in set item in set'이 아닌가? 그것들은 후자의 예제가 효율적이지 않은 것과 같지 않습니다. 파이썬 예제가 O (1) 인 동안은 O (n)입니다. –

답변

12

똑바로 배열 할 수는 없지만 Set<T>으로 전화하면 .contains으로 전화 할 수 있습니다. isItemInSet 호출을 많이하게 될 것 같으면 배열 대신 Set을 사용하는 것이 좋습니다. 훨씬 행복 할 것입니다.

예를 들어 HashSet<T>을 사용하면 isItemInSet이 O (1) 연산 (평균)이됩니다. 설정 삽입 및 삭제도 비슷하게 빠릅니다. 사실 HashSet<T>은 기본적으로 Python set() (기본 개념 및 성능과 비슷한 특성)과 동일합니다. 집합에 대한 쿼리, 삽입 또는 삭제에 대한 많은 호출로 속도가 크게 향상됩니다.

+0

'Set '를 체크 아웃합니다! –

+4

'Set '은 인터페이스입니다. 'HashSet '(대부분의 용도로 권장)과 같은 구현 하위 클래스를 사용하고자 할 것입니다. – nneonneo

+0

:) 'HashSet '을 실행하자마자 받아 들여야합니다! –