HashMapとHashtableの比較は、Javaインタビューでよくある質問です。これは、プログラマーがコレクションクラスを正しく使用できるかどうか、および問題を解決するためにさまざまなアイデアに適応できるかどうかをテストするために使用されます。 HashMapの仕組み、ArrayListとVectorの比較、およびこの質問は、Javaコレクションフレームワークに関する最も古典的な質問です。 Hashtableは、Java APIに長い間存在していた時代遅れのコレクションクラスです。 Java 4で書き直され、マップインターフェイスを実装したため、その後Javaコレクションフレームワークの一部になりました。ハッシュテーブルとハッシュマップは、Javaのインタビューで非常に簡単に尋ねることができ、コレクションフレームワークのインタビューでテストされる最も一般的な質問にさえなります。
この記事では、ハッシュマップとハッシュテーブルの違いだけでなく、それらの類似性も確認します。
ハッシュマップとハッシュテーブルの違い
ハッシュマップとハッシュテーブルの両方がマップインターフェイスを実装しますが、使用するものを決定する前に、最初にそれらの違いを把握する必要があります。主な違いは、スレッドの安全性、同期、速度です。
注意すべきいくつかの重要な用語:
1)Sychronizedとは、1つのスレッドのみがハッシュテーブルを一度に変更できることを意味します。つまり、ハッシュテーブルを更新したい場合、すべてのスレッドはまず同期ロックを取得する必要があります。他のスレッドは、同期ロックがリリースされるまで、同期ロックを取得し、ハッシュテーブルを再度更新する前に待機する必要があります。
2)Fail-SafeおよびIterator Iteratorが関連しています。コレクションオブジェクトがイテレーターまたはListiteratorを作成し、他のスレッドがコレクションオブジェクトを「構造的に」変更しようとする場合、同時モジオ化エクセプトの例外がスローされます。ただし、他のスレッドは、セット()メソッドを介してコレクションオブジェクトを変更することができます。これは、コレクションを「構造的に」変更しないためです。ただし、構造が変更され、set()メソッドが呼び出された場合、IllegalargumentExceptionの例外がスローされます。
3)構造の変化は、マップの構造に影響する要素の削除または挿入を指します。
Hashmap Syncを作成できますか?
HashMapは、次のステートメントで同期することができます。
マップM = collections.synchronizemap(hashmap);
結論は
ハッシュテーブルとハッシュマップの間には、スレッドの安全性と速度にはいくつかの主な違いがあります。完全なスレッドの安全性が必要な場合にのみハッシュテーブルを使用し、Java 5以上を使用する場合は、concurrenthashmapを使用してください。
オリジナルリンク:JavareVisited翻訳:Importnew.com -Tang Xiaojuan翻訳リンク:http://www.importnew.com/7010.html