お疲れ様です!!
4日目は、「Set」からスタートです!!
セットは、コレクション(データの集まり)を扱うためのインターフェースとのことです。
たくさん種類はあるけど、データ構造を理解してないとしんどいということで、Tim先生はまずは基本系を教えてくださりました。
配列と似たところがありますが、配列は要素の数を設定したりする必要があったのに対して、セットやリストは、要素を増やしたり減らしたりで全体の数が分からない場合に使えるとのことです!!
【setについて】
setは、順番はバラバラだけど、重複はダメよ!
といったやつです。
まずは、Setを宣言!!
Set<データ型>変数名 = new HashSet<データ型>();
なるほど!
早速、Tim先生、お願いします!!
set<Integer>t = new HashSet<Integer>();
setを宣言すると、
「new HashSet」
に赤の下線が引かれました。
ここをクリックすると、HashSetをインポートできるようです。
このインポートをしないと使えないようです!!
そして、HashSetは、Setの一種で、
・重複データNG
・順番は気にしない
・検索が速い(Hashテーブルという仕組みを使ってデータを管理しているからたくさんのデータの中から目的のデータを探すのが得意)
・nullを出せる(重複はダメなので、一度だけ)
のようです。
そして、この時点で更に疑問に思ったことが、、、
なんで「Integer」なの!?
「int」じゃあかんの!?
なにやらTim先生がそこらへんを説明してくれてるっぽいですが、自動翻訳がちょっとスッと入ってきませんでした、、、
この時はスルーしてしまい、次に進みましたが、現時点(2月12日)でもイマイチ分からないので、AI先生に聞きます!!
(AI先生より)
なんでIntegerなのかの説明の前に、Javaのデータには大きく分けて「プリミティブ型」と「オブジェクト」の2種類があります。
・基本データ型(プリミティブ型):int,double,booleanなど、シンプルなデータそのものを表す。
・ラッパークラス(オブジェクト型):複数のデータや機能をまとめた、より複雑なデータを表す。
intは、プリミティブ型なので、そのままではSetのようなオブジェクトを扱う仕組みには入れません。
そこで、intを包み込むIntegerの登場。
(SetやListは、オブジェクトを管理・操作するためのもの)
<プレゼントに例えると>
int:プレゼントそのもの
Integer:可愛い包装・ラッピング
Set:箱
なるほど!!
理解した!!
次にいきます!!
Set<Integer>t = new HashSet<Integer>();
整数をまとめたsetのtを箱として使うために、新たにHashSetとして宣言
↓
Setに要素を入れる
Set<Integer>t = new HashSet<Integer>();
t.add(5);
t.add(7);
t.add(5);
t.add(9);
System.out.println(t);
⇓
{5,7,9}
この例では、5が重複しているから、出力の際に重複分は消されてますね!!
【Setの中に特定の何かが存在しているのか確認したい】
Tim先生が次に紹介してくださったのが、
膨大な要素数のセットがある際に特定の要素が中に入っているかどうかを確認する方法です。
t.add(5);
t.add(7);
t.add(5);
t.add(9);
boolean x = t.contains(5);
System.out.println(t);
System.out.println(x);
⇓
{5,7,9}
true
5は入っているので、trueが返ってきました!!
ためしに1とか入れると、ちゃんとfalseになりました!!
【Setの中の要素を削除したい】
Setの中の特定の要素を削除するには、.removeを使うようです!!
t.remove(5);
⇓
出力の際に5が削除されている。
【Setの中身の全ての要素を削除したい】
.clear();
【Setが空かどうかを確認したい】
.isEmpty();
【Setの中の要素数を確認したい】
.size();
t.add(5)
t.add(7)
t.add(9)
t.add(5)
t.add(-8)
t.add(9)
t.size();
int x = t.size();
System.out.println(t);
System.out.println(x);
⇓
{5,7,-8}
3
HashSetは順番はランダムなので、-8が後ろにいったりしてますね。
9は.removeで消してますので、3つの要素が出てきました!!
ちなみに、セットの中のt.size();は無くても機能しました!!
【Tree Set(ツリーセット)】
HashSetと違い、自動で順番通りに並べ替えて出力してくれるやつのようです!!
Set<Integer>t = new HashSet<Integer>();
の
HashSetをTreeSetに変えるだけでした!!
(TreeSetのインポートは必須)
【LinkedHashSet(リンクドハッシュセット)】
自分が書いた並び通りに出力してくれました!!
結構長くなってしまったので、いったんこの記事は終わりにします!!
次の記事ではListを復習します!!
ではでは!!