Kotlinの可変セット(MutableSet)の作り方と使い方をやさしく解説!初心者でも安心の重複なしデータ管理
生徒
「Kotlinで、同じデータが入らないようにして、あとから追加したり削除したりしたいです!」
先生
「それなら『可変セット(MutableSet)』を使うといいですよ。データの重複を自動で防ぎながら、追加や削除もできます。」
生徒
「可変セットって、初心者でも使えますか?どうやって使うんですか?」
先生
「もちろんです。KotlinのMutableSetはとてもシンプルで、パソコン初心者でも簡単に使えますよ。これからやさしく説明しますね!」
1. 可変セット(MutableSet)とは?初心者向けにわかりやすく解説
Kotlin(ことりん)では、たくさんのデータを整理して保管するための「箱」のような仕組みをコレクションと呼びます。その中でも、特にユニークな特徴を持つのがMutableSet(可変セット)です。
MutableSetを一言でいうと、「重複を絶対に許さない、中身を自由に入れ替えられる魔法の袋」です。具体的には、以下の3つの大きなポイントがあります。
- データの重複を自動でシャットアウト: 同じデータを2回入れようとしても、2回目は無視されます。
- 後から中身を変更できる: プログラムの途中で、新しいデータを足したり、不要なデータを捨てたりできます。
- 順番を固定しない: 基本的に、データを入れた順番を厳密に守るよりも「何が入っているか」を重視します。
例えば、あなたが「文化祭のスタンプラリー」を管理するアプリを作っていると想像してみてください。同じ人が何度スタンプを押しても、カウントは「1回」だけにしたいですよね。そんな時に、このMutableSetが自動で重複をチェックしてくれるので、非常に便利です。
イメージしてみよう:
「リスト(List)」は、出席番号順に並んだ名簿のようなもの。同じ名前が何度出てきてもOKです。
「セット(Set)」は、カゴの中に入れたボールのようなもの。同じ色のボールは1つしか入れられないルールがある、と考えるとわかりやすいですよ!
それでは、実際にどのように動くのか、簡単なプログラムでイメージを掴んでみましょう。
fun main() {
// 1. 重複を許さない「お買い物リスト」を作ってみる
// 「りんご」を2回書いても、セットは賢いので1つにまとめてくれます
val shoppingSet = mutableSetOf("りんご", "バナナ", "りんご")
// 画面に表示すると、りんごは1つしか出てきません
println("現在のカゴの中身: $shoppingSet")
}
現在のカゴの中身: [りんご, バナナ]
このように、プログラミング未経験の方でも、データの重複を気にせずにどんどん追加できるのがMutableSetの強みです。難しいロジックを書かなくても、Kotlin側で「これ、もう入ってるよ!」と判断してくれるので、ミスが少ない安全なプログラムを書くことができます。
2. KotlinでMutableSetを作る基本の書き方
Kotlinで中身を自由に書き換えられる箱(コレクション)を作りたいときは、mutableSetOfという魔法の言葉を使います。Set(セット)の最大の特徴は、「同じものを重複して持てない」という点です。例えば、買い物リストを作る際に同じものを二度書かないように自動で整理してくれるイメージです。
まずは、プログラミングが初めての方でも分かりやすい「好きな果物リスト」を例に、基本的な書き方を見てみましょう。
fun main() {
// 1. MutableSet(中身を変更できるセット)を作成する
val fruits = mutableSetOf("りんご", "バナナ", "みかん")
// 2. 同じ「りんご」をもう一度追加しようとしてみる
fruits.add("りんご")
// 3. 結果を表示する(重複した「りんご」は無視されます)
println(fruits)
}
[りんご, バナナ, みかん]
上記のコードでは、mutableSetOf()を使って「りんご・バナナ・みかん」が入った可変セットを作成しました。途中で「りんご」をもう一度追加する命令(add)を書いていますが、実行結果を見ると「りんご」は1つしか表示されません。これがSetの便利な仕組みです。
このように、「順番は気にしないけれど、中身の重複は絶対に避けたい」という場面で、このMutableSetは非常に強力な味方になってくれます。
3. データを追加してみよう(addメソッドの使い方)
作成したMutableSet(ミュータブルセット)に新しいデータを追加したいときは、add()という命令(メソッド)を使います。プログラミングに慣れていない方でも、リストに項目を書き足すような感覚で簡単に操作できます。
ただし、セットには「重複するデータは無視される」という重要なルールがあります。実際にコードを動かして、その挙動を確認してみましょう。
fun main() {
// 1. 最初に「赤」と「青」が入ったセットを作る
val colors = mutableSetOf("赤", "青")
// 2. 新しく「緑」を追加する
colors.add("緑")
// 3. すでにある「赤」をもう一度追加してみる
colors.add("赤")
// 結果を表示
println(colors)
}
[赤, 青, 緑]
実行結果を見ると、2回追加しようとした「赤」は1つしか存在しません。これはエラーではなく、セットが自動的にデータの重複をチェックして、常に一意(ユニーク)な状態を保ってくれているからです。
この特性は、例えば「Webサイトの訪問者のIDを記録する」ときや「アンケートの回答から重複を除きたい」ときなど、実務的なプログラムでも非常によく使われる便利な機能です。追加したいデータがすでに存在するかどうかを自分で判定する必要がないため、コードをスッキリと記述できます。
4. データを削除してみよう(removeメソッドの使い方)
リストにデータが増えすぎたり、古い情報がいらなくなったりした時は、remove()(リムーブ)というメソッドを使って、特定のデータをピンポイントで削除できます。プログラミングでは、不要なデータを整理してメモリを節約することも大切なポイントです。
削除する際は、「どのデータを消したいか」をカッコの中に指定するだけ。他のデータには影響を与えず、指定したものだけをきれいに取り除くことができます。実際の動きを、Kotlinのサンプルコードで確認してみましょう。
fun main() {
// 3種類の動物が入ったセットを作成
val animals = mutableSetOf("いぬ", "ねこ", "うさぎ")
// "ねこ"を指定して削除する
animals.remove("ねこ")
// 結果を表示(ねこが消えて、いぬとうさぎだけが残る)
println(animals)
}
[いぬ, うさぎ]
実行結果を見ると、指定した「ねこ」だけが消え、他のデータは順番を維持したまま残っているのがわかりますね。もし、存在しないデータ(例:「ぞう」など)を削除しようとしても、エラーにはならず単に無視されるだけなので、初心者の方でも安心して使うことができます。
このように、remove()を使えば、まるで消しゴムで消すような感覚で、自由自在にコレクションの中身をメンテナンスすることが可能です。
5. MutableSetの活用例:重複を許さないイベントの出席管理
プログラミングをしていると、「同じデータを二度と登録したくない」という場面によく遭遇します。例えば、イベントの出席者リストを作る際、同じ人が何度も受付を通っても、名簿には1人として記録したいですよね。
そんな時に役立つのがMutableSet(ミュータブルセット)です。この機能は、中身を自由に入れ替えられるだけでなく、「重複するデータは自動で無視する」という非常に賢い性質を持っています。初心者の方が間違いやすい「重複チェックの条件分岐」を自分で書く必要がなくなるため、コードがスッキリします。
fun main() {
// 出席者リスト(MutableSet)を作成
val attendees = mutableSetOf<String>()
// 出席者を順番に追加していく
attendees.add("たろう")
attendees.add("はなこ")
// ここで「たろう」をもう一度追加してみます
attendees.add("たろう")
println("現在の出席人数: ${attendees.size}人")
println("出席者一覧:")
// リストの中身を表示
for (name in attendees) {
println("- $name")
}
}
現在の出席人数: 2人
出席者一覧:
- たろう
- はなこ
実行結果を見ると、3回追加の操作をしたのに、結果は2人だけになっています。これがMutableSetの最大の特徴です。attendees.add("たろう")を何度繰り返しても、セットが自動的に「あ、この人はもう入っているな」と判断して弾いてくれるのです。
「データのダブりを防ぎたい」「ユニーク(唯一)な値だけを集めたい」という時は、ListではなくこのMutableSetを積極的に活用してみましょう。管理が驚くほど楽になりますよ。
6. 特定のデータが存在するか確認する方法(contains)
大量のデータを扱っていると、「特定のアイテムがすでに登録されているか?」を確認したい場面がよくあります。 そんな時に便利なのがcontains()(コンテインズ)メソッドです。
プログラミング未経験の方でも直感的に使える機能で、セットの中に指定した値が含まれていれば「true(ある)」、含まれていなければ「false(ない)」という結果を返してくれます。
if文と組み合わせることで、「データがある場合だけ特定の処理をする」といったプログラムの流れを簡単に作ることができます。
fun main() {
// 食べ物リスト(Set)を作成
val foods = mutableSetOf("ラーメン", "カレー", "うどん")
// 「カレー」がリストに含まれているかチェック
if (foods.contains("カレー")) {
println("【判定結果】カレーは見つかりました!献立に追加しましょう。")
} else {
println("【判定結果】カレーはリストにありません。")
}
// 存在しないデータをチェックした場合
val hasSushi = foods.contains("寿司")
println("寿司はありますか? : $hasSushi")
}
【判定結果】カレーは見つかりました!献立に追加しましょう。
寿司はありますか? : false
このように、contains()はデータの有無を瞬時に判定してくれるため、重複チェックや検索機能の実装に欠かせない非常に強力なツールです。
MutableSetは検索スピードが非常に速いという特徴があるため、データが増えてもスムーズに動作します。
7. MutableSetをクリアする(全削除)
リストやセットを使っていて、「中身を一度すべて空っぽにして、最初からやり直したい」という場面が出てきます。そのようなときは、clear()(クリア)というメソッドを使うのが一番簡単で確実な方法です。
例えば、買い物リストをすべて消去したり、ゲームのスコア一覧をリセットしたりするイメージですね。以下のサンプルコードで、どのように中身が消えるのかを確認してみましょう。プログラミングが初めての方でも、実行結果を見れば一目瞭然です。
fun main() {
// 最初に3つのデータが入ったセットを作成します
val items = mutableSetOf("A", "B", "C")
println("削除前: $items") // [A, B, C] と表示される
// clear()を使って中身をすべて削除します
items.clear()
// 削除した後の状態を確認します
println("削除後: $items")
}
削除前: [A, B, C]
削除後: []
実行結果の[]は、「箱の中身が空っぽになった」ということを示しています。このclear()の便利な点は、変数そのものを新しく作り直すのではなく、既存の「箱(MutableSet)」を再利用できることです。データの初期化が必要なシーンで非常に頻繁に使われる、基本かつ重要なテクニックです。
まとめ
KotlinのMutableSetは重複しないデータを扱うための非常に便利なコレクションです。プログラミング未経験の方でも扱いやすくデータ管理の基礎を学ぶうえでとても重要な存在です。MutableSetの最大の特徴は同じ値を何度追加しても一つしか保持されない点にあります。この仕組みによって重複チェックの処理を自分で書く必要がなくなりコードがシンプルになります。
またMutableSetは可変であるためデータの追加や削除を自由に行うことができます。addでデータを追加しremoveで削除しcontainsで存在確認を行うという基本的な流れを理解することで多くの場面に応用できるようになります。さらにclearを使えば中身をすべて初期化することも可能です。このように一つのコレクションでさまざまな操作ができる点も大きな魅力です。
Listとの違いを理解することも重要です。Listは順番を保持し重複を許しますがMutableSetは重複を許さず順番を保証しないという特徴があります。つまり順番よりもデータの一意性を重視する場合に適しているということです。この違いを理解して使い分けることでより正確なプログラムを書くことができるようになります。
実務ではユーザー一覧の管理やタグの管理検索結果の重複排除などさまざまな場面で利用されます。特に同じデータを二重に登録したくない場合には必須ともいえる存在です。初心者の段階でこの考え方に慣れておくことで実際の開発でもスムーズに対応できるようになります。
またMutableSetは内部的に高速に検索できる仕組みを持っているため大量のデータを扱う場合でも効率よく処理することができます。データの存在確認が高速に行えるためパフォーマンスの面でも優れています。このような特徴を理解することでより実践的な知識として身につけることができます。
最後に重要なポイントとして順番が保証されない点やインデックスで取得できない点があります。この違いを理解せずに使うと予期しない動作につながる可能性があります。常にどのような場面で使うべきかを考えながら使うことが大切です。
サンプルプログラムで復習
fun main() {
val set = mutableSetOf("A", "B")
set.add("C")
set.add("A")
if (set.contains("B")) {
println("Bは存在します")
}
set.remove("A")
println(set)
}
Bは存在します
[B, C]
生徒
「MutableSetは同じデータを入れても一つになるんですね」
先生
「そうです重複を自動で防いでくれるのが特徴です」
生徒
「追加や削除も簡単でしたし初心者でも使いやすそうです」
先生
「その通りです特にデータが重複してはいけない場面で活躍します」
生徒
「Listとの違いも分かりました順番より重複しないことが大事なときに使うんですね」
先生
「よく理解できていますこの考え方は実務でも非常に重要になります」
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
この記事を読んだ人からの質問
プログラミング初心者からのよくある疑問/質問を解決します
KotlinのMutableSetとは何ですか 初心者でもわかるように教えてください
KotlinのMutableSetとは重複しないデータを管理できるコレクションであり追加削除が自由にできるのが特徴です 初心者でも扱いやすく同じ値が入らないデータ管理に最適です
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験