1. 導入:データを入れる「器」を間違えるとどうなるか?
「とりあえず ArrayList に入れて、重複チェックを for文で回す……」
そのコード、データが10万件になっても大丈夫ですか?
Javaの Collection には多くのクラスがありますが、それぞれに「得意な仕事」と「苦手な動作」があります。
2. 主要3派閥のキャラクターを知る
まずは、インターフェースごとの「性格」を整理します。
List(並び順が大事): 出席簿。入れた順番を保持し、インデックス(番号)で指定できる。
Set(重複は許さない): パーティーの招待客リスト。同じ人は二人いらない。順序は気にしない。
Map(ペアで管理): 下駄箱の番号と靴。キー(番号)を指定すれば、中身(靴)が一瞬で取り出せる。
3. 【徹底比較】速度と制限のトレードオフ
| クラス名 | 重複 | 順序 | 検索速度 | 特徴・使い道 |
| ArrayList | 許す | 保持 | 遅い(O(n)) | 最も汎用。 最後尾への追加は速いが、検索は端から探すので遅い。 |
| HashSet | 禁止 | なし | 爆速(O(1)) | 重複を自動で消したい時。検索が非常に速い。 |
| TreeSet | 禁止 | ソート | 普通(O(log n)) | 常に中身を並び替えておきたい時。 |
| HashMap | キー禁止 | なし | 爆速(O(1)) | IDから名前を引くような、紐付け管理の王者。 |
4. 納得ポイント:なぜ Set の検索は速いのか?
ArrayList は、100万人の中から一人を探すのに、最悪100万人全員を確認します。
対して HashSet は、**「ハッシュ値」**という整理番号を使って、一瞬でターゲットが居そうな場所を特定します。
「データ量が増えても検索時間がほぼ変わらない」という事実に、データ構造の凄さを納得しました。
5. 「null」の扱いと注意点
ArrayListはnullを入れられる。TreeMap や TreeSet はソートを行うため、null を入れると NullPointerException で落ちる。
「器を選ぶ段階で、nullを許容するかどうかの設計が始まっている」という視点を提示します。
6. まとめ:器選びのフローチャート
重複を許すか? → Yesなら
List一意(ユニーク)にしたいか? → Yesなら
Setキーと値をセットにしたいか? → Yesなら
Map常にソートが必要か? → Yesなら
Tree系のクラス
0 件のコメント:
コメントを投稿