2013-03-31 9 views
8

itemitem setに存在するかどうかを確認したいと思います。PythonのJavaに相当する 'in' - セットメンバーシップテスト用?

私はのjavaでこれをしたい:(。。私のpythonはニシキヘビない場合は謝罪ちょうど私の意図を伝えたかった)

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

これら2つのコードは同等ではありません。 – Cairnarvon

+0

彼らは今ですか?あなたは '.contains()'を参照しましたか?私は '.equals()'に置き換えました。 –

+4

あなたのPythonにアンチパターンがあります。単にitem_set'を返すだけではないのですか?後者の例も効率的ではないので、Pythonの例はO(1)ですが、O(n)と同じではありません。 –

答えて

12

ストレートアレイではできませんが、Set<T>では.containsに電話することができます。 isItemInSetコールをたくさんやっているように感じたら、配列の代わりにSetを使用することを検討してください。あなたはもっと幸せになるでしょう。

たとえば、HashSet<T>を使用すると、isItemInSetはO(1)操作(平均)になります。セットの挿入と削除も同様に高速です。確かに、JavaのHashSet<T>は基本的にPython set()(基本的なコンセプトとパフォーマンスの特性に似ています)と同じです。セットに対するクエリ、挿入、削除の呼び出しが多く、スピードが大幅に向上します。

+0

'Set 'をチェックアウトします! –

+4

'Set 'はインターフェイスです。 'HashSet 'のような実装サブクラスを使いたいでしょう(ほとんどの用途で推奨されています)。 – nneonneo

+0

:) 私の 'HashSet 'が稼働したらすぐに受け入れてください! –

関連する問題