2013-03-31 5 views
8

Voglio verificare se esiste uno item in un item set.Equivalente Java di Python 'in' - per il test di appartenenza impostato?

Voglio fare questo in java:

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

(.. Mi scuso se il mio pitone non è divinatorio Volevo solo comunicare la mia intenzione)

sono riuscito a scrivere questo :

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

esiste un modo migliore per i test set-membership in Java?

+0

Queste due parti di codice non sono equivalenti. – Cairnarvon

+0

Sono adesso? Ti riferivi al '.contains()'? L'ho sostituito con '.equals()'. –

+4

C'è un anti-pattern nel tuo Python, perché non solo "restituisci l'oggetto in item_set'? Non sono uguali come l'ultimo esempio non è efficiente, è O (n) mentre l'esempio di Python è O (1). –

risposta

12

Non è possibile farlo con un array diretto, ma è possibile con un Set<T> chiamando .contains. Se pensi di fare un sacco di chiamate isItemInSet, considera l'utilizzo di Set s invece di array: sarai molto più felice.

Ad esempio, l'utilizzo di HashSet<T> rende isItemInSet un'operazione O (1) (in media). Anche l'inserimento e la cancellazione sono altrettanto veloci. Infatti, uno in Java è essenzialmente lo stesso di un Python set() (concetto di base e caratteristiche di performance simili) - vedrete un notevole miglioramento della velocità con molte chiamate a interrogare, inserire o eliminare sul set.

+0

Verificherà 'Set '! –

+4

Si noti che 'Set ' è un'interfaccia. Vorrete utilizzare una sottoclasse di implementazione come 'HashSet ' (consigliata per la maggior parte degli usi). – nneonneo

+0

:) Accetta non appena ho il mio 'HashSet ' attivo e funzionante! –