月ノ書

JavaのSetとは何か | 重複を許さないコレクションの基本解説

この記事でわかること
  • よく使われるSetの種類を知ることができます
  • JavaのSetがどんな場面で使われるのかわかります
  • Listとの明確な違いを理解できます
  • Setの基本的な使い方を学べます
  • 重複がどう扱われるかを理解できます

Setとは何か

Setは、同じ値を1つしか持てないコレクションです
Listと同じく複数のデータを扱えますが、重複を自動で排除してくれる点が最大の特徴です

たとえば、同じユーザー名やIDが複数登録されるのを防ぎたい場合に向いています

ListとSetの違い

ここで一度、Listとの違いを整理しておきます

項目ListSet
順番保持される基本的に保証されない
重複可能不可
インデックスありなし
主な用途順番付きのデータ重複を許さないデータ

この使い分けがとても大事です

Setを使う準備

SetもListと同じくインターフェースなので、実装クラスを使います
一番よく使われるのは HashSet です

import java.util.HashSet
import java.util.Set

Set<String> names = new HashSet<>()

要素を追加する

Setでは add メソッドを使って要素を追加します

names.add("ネコ")
names.add("イヌ")
names.add("ネコ")

この場合、Setの中身は次のようになります

ネコ
イヌ

同じ値を追加しても、Setには1つしか残りません
エラーにはならず、静かに無視されるのが特徴です

要素が存在するか確認する

Setでは contains を使って、要素の存在確認ができます

if (names.contains("ネコ")) {
    System.out.println("登録されています")
}

検索が速いのもSetの強みです

要素を削除する

削除は remove を使います

names.remove("イヌ")

Setにはインデックスがないため、値そのものを指定します

要素数を取得する

要素数は size で取得できます

System.out.println(names.size())
コレクション要素数取得
配列length
Listsize()
Setsize()

ここはListと共通なので覚えやすいです

ループでSetを扱う

Setはインデックスを持たないため、基本的に拡張for文を使います

for (String name : names) {
    System.out.println(name)
}

順番は保証されないので、出力順が毎回変わる可能性があります

よく使われるSetの種類

Setにはいくつか種類があります

種類特徴
HashSet高速で一般的
LinkedHashSet追加順を保持
TreeSet自然順でソートされる

用途に応じて選びます

Setを使うときの注意点

Setは「集合」として考えると理解しやすくなります

まとめ

Setは、重複を許さないデータを扱うためのコレクションです
Listとの違いを理解し、順番が不要で一意性が重要な場面で使うと、とても強力です
特にデータの重複チェックや存在確認では、Setの便利さを実感できるようになります

学習進捗