2013-03-31 2 views
8

Я хочу проверить, существует ли item в item set.Java-эквивалент Python 'in' - для тестирования набора членов?

Я хочу сделать это в Java:

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()'. – 2013-03-31 08:54:21

+4

В вашем Python есть анти-шаблон, почему бы не просто «вернуть элемент в item_set»? Они также не совпадают, так как последний пример не так эффективен, это O (n), в то время как пример Python - O (1). –

ответ

12

Вы не можете сделать это с помощью прямого массива, но можете с помощью Set<T> позвонить по телефону .contains. Если вы чувствуете, что будете делать много звонков isItemInSet, подумайте, используйте вместо Set s вместо массивов - вы будете намного счастливее.

Например, используя HashSet<T>, производит isItemInSet операцию O (1) (в среднем). Установка вставки и удаления также выполняется быстро. Действительно, HashSet<T> в Java по существу такой же, как Python set() (аналогичная базовая концепция и характеристики производительности) - вы увидите значительное улучшение скорости со многими вызовами запроса, вставки или удаления на множестве.

+0

Выберет 'Set '! – 2013-03-31 08:57:14

+4

Обратите внимание, что 'Set ' - это интерфейс. Вы захотите использовать подклассы реализации, такие как 'HashSet ' (рекомендуется для большинства целей). – nneonneo

+0

:) Принять, как только я заработаю 'HashSet '! – 2013-03-31 09:03:18

 Смежные вопросы

  • Нет связанных вопросов^_^