SetとMapの主な違いは、Setがコレクションインターフェースのサブタイプであるのに対し、Mapはコレクションインターフェースのサブタイプではないことです。
配列は同じ型のデータを格納する。
しかし、配列は一度作成すると変更することができません。
Javaなどのプログラミング言語では、データを動的に格納するためにコレクションを用意しています。
複数のオブジェクトを1つのグループとして格納することができる。
また、コレクションに対して、ソート、検索、挿入、削除などの操作を行うことが可能である。
Javaでコレクションを実装するための基本インターフェースはCollectionと呼ばれます。
Collectionインタフェースを拡張した様々なインタフェースが存在します。
その一つがSetインタフェースです。
一方、Mapは別のインタフェースであるため、Collectionインタフェースを拡張することはない。
セットとは
Setは、Collectionインターフェイスを拡張したインターフェイスです。
重複した値を含むことはできない。
HashSetとTreeSetがSetを実装しています。
Setインタフェースは、コレクションに対して操作を行うために、add、sizeなどのメソッドを提供する。
以下に例を示す。
HashSetはSet型のオブジェクトです。
文字列を格納することができる。
HashSetに要素を挿入するには、addメソッドを使用する。
apple “という文字列が2つあっても、出力にはappleが1つしかない。
そのため、すでにSetに存在する要素は表示されません。
さらに、Setを非順序リストとして出力しています。
sizeメソッドは、Setに含まれるアイテムの数を示します。
次の例を参照してください。
ツリーセットは文字列を格納できるSet型のオブジェクトです。
ツリーセットへの要素の挿入はaddメソッドで行う。
apple “という文字列が2つあっても、出力されるappleは1つだけです。
そのため、ユニークな要素のみを表示します。
さらに、Setは順序付きリストとして出力されます。
sizeメソッドは、Setに含まれるアイテムの数を表示します。
地図とは
Map は、キーと値の対応関係を表すインターフェースです。
Collectionインターフェイスを継承していません。
そのため、Mapの動作は通常のCollection型とは異なります。
Mapは重複したキーを持つことができず、各キーは最大で1つの値に対応することができます。
図3: HashMap を用いたプログラム
studentList は Map 型のオブジェクトである.文字列を格納することができる.studentList への要素の挿入は put メソッドで行う.Peter “には2つのレコードがあるが、1つしか表示されない。
HashMapは挿入された順序を維持しません。
一意な値のみを表示する。
Letters は Map 型のオブジェクトです。
文字列を格納することができる。
Lettersへの要素の挿入はputメソッドで行う。
B “には2つのレコードがあるが、1つのレコードしか表示されない。
TreeMapは挿入された順序を維持しない。
一意な値だけを表示する。
セットとマップの違い
定義
SetはCollection階層の中で、重複した要素を含むことができないインターフェースであるのに対し、Mapは一意のキーと値を対応付けるインターフェースです。
これがSetとMapの大きな違いです。
コレクションインターフェースとの関連
SetはCollectionインタフェースを拡張したインタフェースであり、 Mapは別のインタフェースです。
機能性
SetとMapの大きな違いは、その機能性です。
Setは一意な値を保存するのに役立つのに対し、Mapはキーと値の対応付けを表すインターフェースです。
結論
SetとMapの主な違いは、SetがCollectionインタフェースのサブタイプであるのに対し、MapはCollectionインタフェースのサブタイプでないことです。