#プログラミング勉強日記
2020年10月15日
JavaでTreeSetを使ったが、HashSetとの違いがよくわからなかったので、記録する。
#コレクションクラスとは
コレクションは要素を集めたオブジェクトのこと。コレクションクラスは大きく分けてList,Map,Setの3つの種類がある。それぞれ性質の異なるクラスに分かれている。
List構造はArrayListとLinkedListの2種類ある。List構造は要素を順番付けして管理する構造で、要素はインデックス番号順に並んでいるので、番号を指定して要素の取得や挿入、更新、変更などができる。
Map構造はHashMapとTreeMapの2種類ある。Map構造はキーと値をセットにしたものを1つの要素として管理するデータ構造で、要素がキーとして管理されているのでキーを指定して値の更新や削除をお来ぬことができる。
今回扱うHashSetとTreeSetは名前からもある通りSet構造であり、下記にまとめる。
#Set構造のコレクションクラスとは
Set構造はHashSetとTreeSetの2種類あり、要素を順番付けしないで管理するデータ構造である。Listのような順番付けやMapのようなキー管理もないので要素の取得にはIteratorや拡張for文で取得する。要素の重複はできない(同じキーがセットされた場合は上書きする。)
HashMapとTreeSetの違いを簡単にまとめると以下のようになる。
- HashMapは取得順は関係ない
- TreeSetはソートされた順で要素の取得ができる
- HashMapはnullを扱えない
- TreeSetはnullを扱える
HashMapは要素の取得順は保証されないが、TreeSetは自動ソートされて管理されるのでソートされた順番で要素が取得できる。また、HashMapは要素にnullを使用することができるが、TreeSetはnullを使用することができる。
#まとめ
Set構造だけでなくコレクションクラスの特徴を表で簡単にまとめる。
ArrayList | LinkedList | HashMap | TreeMap | HashSet | TreeSet | |
---|---|---|---|---|---|---|
インタフェース | List | List | Map | Map | Set | set |
要素の重複 | 〇 | 〇 | × | × | × | × |
nullの要素 | 〇 | 〇 | 〇 | × | × | × |
自動ソート | × | × | × | 〇 | 〇 | 〇 |
上では述べていないが、ArrayListはよその取得が早いが、挿入や削除が遅く、LinkedListは要素の挿入や削除は早いが取得は遅いという特徴がある。
#参考文献
TreeSetクラス
コレクションクラスの比較