こんにちは。たいら(@tairaengineer2)です。
今回の記事はJavaのコレクションの一つであるTreeSetについて、どんな特徴があるのかというのをできるだけ分かりやすく解説していきます。
スポンサーリンク
- 前提条件:eclipseの環境
- TreeSetとは
- TreeSet特徴その1:要素の重複を許さない
- TreeSet特徴その2:要素が自動でソートされる
- TreeSet特徴その3:nullの挿入を許さない
- まとめ
前提条件:eclipseの環境
この記事では、eclipseのバージョンは
バージョン | Eclipse4.7 Oxygen |
---|
を使っています。
インストールの仕方は、下の記事をご参考ください。
TreeSetとは
TreeSetとは、コレクションの一種で、HashSetの拡張クラスです。
クラス構成は下のようになっています。
コレクション - Java入門 - IT専科から引用させて頂きました
TreeSetには以下のような特徴があります。
- 要素の重複を許さない
- 要素が自動でソートされる
- nullの挿入を許さない
どういうことなのかというのを一つずつ見ていきます。
TreeSet特徴その1:要素の重複を許さない
要素の重複を許さない特徴を説明するプログラムが下記になります。
Javaプログラム
import java.util.Set;
import java.util.TreeSet;
/**
*
* TreeSetを練習するクラス
*
*/
public class TreeSample {
public static void main(String[] args) {
// treeSetオブジェクトを生成
Set<String> treeSet = new TreeSet<>();
// 生成したtreeSetに対して、国の名前を追加
treeSet.add("America");
treeSet.add("France");
treeSet.add("Japan");
treeSet.add("Japan");
treeSet.add("Mexico");
treeSet.add("The United Kingdom");
// 重複されていないかを確認
treeSet.stream().forEach(tree -> System.out.println(tree));
}
}
実行結果
America
France
Japan
Mexico
The United Kingdom
このようにJapanを重複して追加しても、入れられていません。
1つ目のJapanが入っているので、2つ目のJapanははじかれています。
これがTreeSetの特徴その1:要素の重複を許さないです。
TreeSet特徴その2:要素が自動でソートされる
要素が自動でソートされる特徴を説明するプログラムが下記になります。
Javaプログラム
import java.util.Set;
import java.util.TreeSet;
/**
*
* TreeSetを練習するクラス
*
*/
public class TreeSample {
public static void main(String[] args) {
// countrySetオブジェクトを生成
Set<String> countrySet = new TreeSet<>();
// 生成したcountrySetに対して、国の名前を追加
countrySet.add("Japan");
countrySet.add("Mexico");
countrySet.add("America");
countrySet.add("France");
countrySet.add("America");
countrySet.add("The United Kingdom");
// アルファベット順にソートされているか確認
System.out.println("--アルファベット順を確認--");
countrySet.stream().forEach(country -> System.out.println(country));
// kanaSetオブジェクトを生成
Set kanaSet = new TreeSet<>();
// 生成したkanaSetに対して、平仮名、カタカナの名詞を追加
kanaSet.add("つくえ");
kanaSet.add("イス");
kanaSet.add("テレビ");
kanaSet.add("せんぷうき");
kanaSet.add("ボール");
kanaSet.add("アイス");
// 五十音順にソートされているか確認
System.out.println("--五十音順を確認--");
kanaSet.stream().forEach(kana -> System.out.println(kana));
}
}
実行結果
--アルファベット順を確認--
America
France
Japan
Mexico
The United Kingdom
--五十音順を確認--
せんぷうき
つくえ
アイス
イス
テレビ
ボール
このようにアルファベット順と、五十音順になっています。
平仮名とカタカナの場合、平仮名を優先します。
これは私が設定しているのではなく、自動でソートされてます。
これがTreeSetの特徴その2:要素が自動でソートされるです。
TreeSet特徴その3:nullの挿入を許さない
nullの挿入を許さない特徴を説明するプログラムが下記になります。
Javaプログラム
package treeSample;
import java.util.Set;
import java.util.TreeSet;
/**
*
* TreeSetを練習するクラス
*
*/
public class TreeSample {
public static void main(String[] args) {
// countrySetオブジェクトを生成
Set<String> countrySet = new TreeSet<>();
// 生成したcountrySetに対して、国の名前を追加
countrySet.add("Japan");
countrySet.add("Mexico");
countrySet.add("America");
countrySet.add("France");
countrySet.add("America");
countrySet.add("The United Kingdom");
// nullを入れると例外が発生するか確認
countrySet.add(null);
// アルファベット順か確認
System.out.println("--アルファベット順を確認--");
countrySet.stream().forEach(country -> System.out.println(country));
}
}
実行結果
Exception in thread "main" java.lang.NullPointerException
at java.util.TreeMap.put(TreeMap.java:563)
at java.util.TreeSet.add(TreeSet.java:255)
at treeSample.TreeSample.main(TreeSample.java:24)
24行目、つまりcountrySet.add(null);でjava.lang.NullPointerExceptionで落ちています。
これがTreeSetの特徴その3:nullの挿入を許さないです。
ちなみにですが、空は許されます。
package treeSample;
import java.util.Set;
import java.util.TreeSet;
/**
*
* TreeSetを練習するクラス
*
*/
public class TreeSample {
public static void main(String[] args) {
// countrySetオブジェクトを生成
Set<String> countrySet = new TreeSet<>();
// 生成したcountrySetに対して、国の名前を追加
countrySet.add("Japan");
countrySet.add("Mexico");
countrySet.add("America");
countrySet.add("France");
countrySet.add("America");
countrySet.add("The United Kingdom");
// 空を入れると例外が発生するか確認
countrySet.add("");
// アルファベット順か確認
System.out.println("--アルファベット順を確認--");
countrySet.stream().forEach(country -> System.out.println(country));
}
}
先ほどのプログラムの違いは、コメントとnullを入れていたところに代わりに空文字を入れただけです。
では、実行してみます。
--アルファベット順を確認--
America
France
Japan
Mexico
The United Kingdom
countrySet.add("");で落ちることなく、表示されました。
また空文字はアルファベットより優先されて表示されます。
スポンサーリンク
まとめ
以上がTreeSetの特徴の解説でした!
TreeSetは使う機会が少ないですが、特徴くらいは覚えておいて損はないかと思います。
この記事があなたのご参考になれば幸いです。
ではでは~(・ω・)ノシ
ほかにも勉強記事を書いてます。
よければご参考ください。