HashMapとHashSetの大きな違いは、HashMapがMapインタフェース階層に属し、Collectionインタフェースとの関連性がないのに対し、HashSetはCollectionインタフェース階層に属している点です。
Javaなどのプログラミング言語では、データを動的に格納するために「コレクション」と呼ばれる機能が用意されています。
コレクションを用いると、複数のオブジェクトを1つの単位として格納することが可能である。
さらに、コレクションに対して、追加、削除、除去、ソート、検索などの操作を行うことも可能である。
Javaでコレクションを実装するための基本インターフェースはCollectionと呼ばれる。
また、SetはCollectionインタフェースを拡張したインタフェースです。
HashSetはこの階層に含まれる。
一方、MapはCollectionを拡張しない独立したインターフェースです。
HashMap は Map 階層に属します。
HashMapとは
HashMap は Map インターフェースをハッシュテーブルで実装したクラスです。
AbstractMapがMapインターフェイスを実装しているのに対し、HashMapはAbstractMapを継承しています。
また,Key-Value のペアを持ち,キーは一意でなければならない.また,1つの NULL キーと複数の NULL 値を持つことができます.さらに,HashMapは同期化されておらず,特定の順序を維持することもない。
プログラム例を以下に示す。
図1: HashMapを用いたプログラム
students’はHashMapのオブジェクトです。
整数をキー、文字列を値とする複数の項目を格納することができる。
HashMapに新しい項目を追加するには、putメソッドを使用します。
Map.Entryを使ったforループにより、studentsにあるすべての項目を調べることができます。
getKey() メソッドはキーを、getValues() メソッドは値を表示します。
さらに、HashMap は特定の順序を維持しません。
したがって、挿入された順序に従って要素が表示されることはありません。
また、キーが 2 の項目は 2 つありますが、1 つの項目しか表示されません。
したがって、ユニークなキーしか含まれない。
HashSetとは
HashSetは、ハッシュテーブルを使用してコレクションを作成するためのクラスです。
HashSet は AbstractSet を継承し、AbstractSet は Set を実装し、Set は Collection を継承しています。
HashSetはNull値を含むことができ、同期化されていない。
さらに,HashSetは挿入順序を保持せず,ユニークな要素のみを含む。
以下はその例です。
fruitsはHashSetのオブジェクトであり,Stringを格納することができる。
addメソッドはHashSetに新しい要素を挿入するのに役立つ。
iteratorメソッドは、HashSetに含まれるアイテムの数を変数iに格納し、whileループで各アイテムを走査して表示する。
まず、追加されたアイテムはOrangeですが、出力される最初のアイテムはAppleです。
その結果、HashSetは挿入順序を維持しない。
さらに、Appleというアイテムは2つありますが、そのうちの1つしか出力されません。
したがって、ユニークなアイテムしか含まれない。
HashMap と HashSet の違い
定義
HashMap は AbstractMap クラスを継承し、Map インターフェイスを実装した、コレクションを作成するためのクラスです。
HashSetは、AbstractSetクラスを継承し、Setインタフェースを実装した、要素の集合を1つの単位として生成するためのクラスです。
これがHashMapとHashSetの根本的な違いです。
コレクションインターフェースとの関連
さらに、HashMap は Map Hierarchy に属します。
Collectionインタフェースには属さない。
一方、HashSetはCollection Hierarchyに属します。
これがHashMapとHashSetの大きな違いのひとつです。
キー、バリュー
HashMapとHashSetのもう一つの違いは、HashMapがキーと値を含むのに対して、HashSetは値を含むことである。
機能性
HashMapとHashSetのもう一つの違いは、HashMapがHashtableを使ってキーに基づいた値を格納するのに対し、HashSetはハッシュ機構を使って要素を格納することである。
結論
HashMap と HashSet の主な違いは、HashMap が Map Interface Hierarchy に属し、Collection Interface との関連性がないのに対し、HashSet は Collection Interface Hierarchy に属していることである。