2012-01-04 3 views
3

java.util.Hashtable.javaでcontainsメソッドのコードを見ただけです。 Hashtableの各エントリをスキャンし、渡された引数と比較します。ハッシュテーブルにcontainsメソッドが複雑になるのはなぜですか?

私は、メソッドが含まれていることを読む一定の時間がかかります。各エントリをスキャンするループがあると、どのように可能になりますか?

public synchronized boolean contains(Object value) { 
if (value == null) { 
    throw new NullPointerException(); 
} 

Entry tab[] = table; 
for (int i = tab.length ; i-- > 0 ;) { 
    for (Entry<K,V> e = tab[i] ; e != null ; e = e.next) { 
    if (e.value.equals(value)) { 
     return true; 
    } 
    } 
} 
return false; 
} 
+3

あなたはコードのその部分を投稿できますか? –

+0

containsまたはcontainsKeyについて質問していますか?マップに値が含まれているかどうかを確認するチェックが含まれており、すべてのエントリをチェックする必要があります。 –

+0

パフォーマンスが懸念される場合は、スレッドセーフである必要がある場合は、HashMapまたはConcurrentHashMapを考慮する必要があります。 –

答えて

6

Hashtable.contains()等しい持つエントリを検索しようとします。 のキーによる検索は、通常の場合、ハッシュテーブルでは一定の時間です。これを明確

ドキュメント:

をテストする場合は、このハッシュテーブルの指定された値にいくつかのキーマップ。この操作はcontainsKeyメソッドよりも高価です。

このメソッドの機能はcontainsValue(コレクションフレームワークのMapインターフェイスの一部)と同じです。

+0

@JamesMontagne:既に編集中でした:) –

+0

十分に、コメントが修正されました:) –

+0

Hashtable.contains()メソッドの複雑さは何ですか? – sampath

関連する問題