この記事の目次
1. Setインタフェースのまとめ
Setは重複要素のないコレクションです。SetインタフェースにHashSetクラス、TreeSetクラス、LinkedHashSetクラスがあります。この記事ではSetインタフェースを実装したコレクションクラスの中に最も一般的なHashSetを紹介します。
* Setインタフェースが備えるメソッドの一覧
メソッド | 意味 | 戻り値 |
---|---|---|
addadd(E e) | Setに要素を追加する | boolean |
addAll(Collection< ? extends E > c) | 指定されたコレクションのすべての要素について、その要素がこのSet内にない場合、Setに追加する | boolean |
remove(Object o) | 指定された要素がSet内にあった場合、Setから削除する | boolean |
removeAll(Collection< ? > c) | このSetから、指定されたコレクションに含まれる要素をすべて削除する | boolean |
clear() | Setからすべての要素を削除する | void |
size() | Set内の要素数を返す | int |
contains(Object o) | 指定された要素がSetに含まれている場合にtrueを返す | boolean |
containsAll(Collection< ? > c) | 指定されたコレクションのすべての要素がこのSetに含まれている場合にtrueを返す | boolean |
equals(Object o) | 指定されたオブジェクトがSetと同じかどうかを比較する | boolean |
isEmpty() | このSetに要素が1つも含まれていない場合にtrueを返す | boolean |
iterator() | Set内の各要素についてのイテレータを返す | Iterator< E > |
2. HashSetの宣言と初期化
HashSetはSetインタフェースを実装したクラスで、重複の要素を許さなく、それぞれの要素に順序がないクラスです。
HashSetの宣言:
HashSet<データ型> 変数名 = new HashSet<>();
HashSet< String > setStr = new HashSet<>(); HashSet< Integer > setInt = new HashSet<>(); HashSet< Date > setDate = new HashSet<>(); HashSet< Float > setFloat = new HashSet<>();
3. 要素の格納・追加・取得・取消
● 要素を格納・追加する
HashSet変数名.add(値); HashSet変数名.addAll(セット); Collections.addAll(HashSet変数名,値1,値2,値3....);
package helloworld; import java.util.Collections; import java.util.HashSet; public class HelloWorld { public static void main(String[] args) { HashSet< Integer > hashSet1 = new HashSet<>(); //addメソッドでlist1に値を1つずつ追加します hashSet1.add(1); hashSet1.add(3); hashSet1.add(2); hashSet1.add(4); System.out.println("hashSet1の要素: " + hashSet1); HashSet< Integer > hashSet2 = new HashSet<>(); //CollectionsクラスのaddAllメソッドでhashSet2に値を一斉に追加します Collections.addAll(hashSet2, 7,8,5,6); System.out.println("hashSet2の要素: " + hashSet2); //addAllでhashSet1にhashSet2を追加します hashSet1.addAll(hashSet2); System.out.println("addAllでhashSet1にhashSet2を追加した: " + hashSet1); } }
コメント
● 要素を取り出す
* 拡張for文を用いたHashSet要素の取り出し
for(HashSet要素の型 e: HashSet変数名){ //e で要素を読み書き }
HashSetに使う拡張for文はArrayとArrayListに使う拡張for文と似ていますので楽勝ですね。
拡張for文を用いたリスト要素の取り出しについて詳しく見たい方:
![]() | 拡張for文を用いたリスト要素の取り出し ../../../java/java-collection-arraylist.html?goto=4to2 この記事ではListを実装したクラスの一つであるArrayListを紹介します。ArrayListは大きさが可変という点でたくさんの応用があるので、開発現場でよく・・・ |
package helloworld; import java.util.HashSet; public class HelloWorld { public static void main(String[] args) { HashSet< Integer > hashSet = new HashSet<>(); //addメソッドでhashSetに値を1つずつ追加します hashSet.add(1); hashSet.add(3); hashSet.add(2); hashSet.add(4); //拡張for分でhashSetの要素を取り出す for(Integer e : hashSet){ System.out.println(e); } } }
1 2 3 4
* イテレータを用いたSet要素の取り出し
Iterator< HashSet要素型 > it = HashSet変数名.iterator(); while(it.hasNext()){ HashSet要素型 e = it.next(); //要素 e を用いた処理 }
Set用の反復子のSetIterator インタフェースのメソッド:
メソッド | メソッドの意味 | 戻り値型 |
---|---|---|
hasNext() | 順方向に次の要素を持っている場合にtrueを返す | boolean |
hasPrevious() | 逆方向に次の要素を持っている場合にtrueを返す | boolean |
next() | Set内の次の要素を返す | E |
nextIndex() | 次のnextで返されることになる要素のインデックスを返す | int |
previous() | Setの前の要素を返す | E |
previousIndex() | 次のpreviousで返されることになる要素のインデックスを返す | int |
remove() | next/previousが返した最後の要素をSetから削除する | void |
package helloworld; import java.util.HashSet; import java.util.Iterator; public class HelloWorld { public static void main(String[] args) { HashSet< Integer > hashSet = new HashSet<>(); //addメソッドでhashSetに値を1つずつ追加します hashSet.add(1); hashSet.add(3); hashSet.add(2); hashSet.add(4); //IteratorでhashSetの要素を取り出す Iterator< Integer > it = hashSet.iterator(); while(it.hasNext()){ Integer e = it.next(); System.out.println(e); } } }
1 2 3 4
● 要素を削除する
* 指定の要素を削除する
HashSet変数名.remove(要素);
* clear()で全ての要素を削除する
HashSet変数名.clear();
package helloworld; import java.util.HashSet; public class HelloWorld { public static void main(String[] args) { HashSet< Integer > hashSet = new HashSet<>(); //addメソッドでhashSetに値を1つずつ追加します hashSet.add(1); hashSet.add(3); hashSet.add(2); hashSet.add(4); //hashSetの全要素をコンソールに出力する System.out.println("元のhashSet全要素:" + hashSet); //hashSetの要素「3」を削除する hashSet.remove(3); //hashSetの全要素をコンソールに出力する System.out.println("\nremove(3)をした後のhashSet全要素:" + hashSet); //clearで全要素を削除する hashSet.clear(); //hashSetの全要素をコンソールに出力する System.out.println("\nclear()をした後のhashSet全要素:" + hashSet); } }
元のhashSet全要素:[1, 2, 3, 4] remove(3)をした後のhashSet全要素:[1, 2, 4] clear()をした後のhashSet全要素:[]
4. 主に使われているメソッド
● size()で要素数を取得する
HashSet変数名.size();
package helloworld; import java.util.HashSet; public class HelloWorld { public static void main(String[] args) { HashSet< Integer > hashSet = new HashSet<>(); //hashSetの要素数をコンソールに出力する System.out.println("hashSetの初期化直後のサイズ:" + hashSet.size()); //addメソッドでhashSetに値を1つずつ追加します hashSet.add(1); hashSet.add(3); hashSet.add(2); hashSet.add(4); //hashSetの要素数をコンソールに出力する System.out.println("hashSetに要素を追加した後のサイズ:" + hashSet.size()); } }
hashSetの初期化直後のサイズ:0 hashSetに要素を追加した後のサイズ:4
● contains()で要素の有無を確認する
HashSet変数名.contains(値);
package helloworld; import java.util.HashSet; public class HelloWorld { public static void main(String[] args) { HashSet< Integer > hashSet = new HashSet<>(); //addメソッドでhashSetに値を1つずつ追加します hashSet.add(1); hashSet.add(3); hashSet.add(2); hashSet.add(4); System.out.println("hashSetの全要素: " + hashSet); if(hashSet.contains(2)){ System.out.println("要素2が見つかりました"); }else{ System.out.println("要素2が見つかりませんでした"); } } }
hashSetの全要素: [1, 2, 3, 4] 要素2が見つかりました
● isEmpty()で空Setか確認する
HashSet変数名.isEmpty(値);
package helloworld; import java.util.HashSet; public class HelloWorld { public static void main(String[] args) { HashSet< Integer > hashSet = new HashSet<>(); System.out.println("hashSetの全要素: " + hashSet); if(hashSet.isEmpty()){ System.out.println("hashSetは空Setです"); }else{ System.out.println("hashSetは空Setではありません"); } //addメソッドでhashSetに値を1つずつ追加します hashSet.add(1); hashSet.add(3); hashSet.add(2); hashSet.add(4); System.out.println("hashSetの全要素: " + hashSet); if(hashSet.isEmpty()){ System.out.println("hashSetは空Setです"); }else{ System.out.println("hashSetは空Setではありません"); } } }
hashSetの全要素: [] hashSetは空Setです hashSetの全要素: [1, 2, 3, 4] hashSetは空Setではありません
● toArray()でHashSetから配列に変換する
HashSet変数名.toArray(配列変数名);
package helloworld; import java.util.HashSet; public class HelloWorld { public static void main(String[] args) { HashSet< Integer > hashSet = new HashSet<>(); //addメソッドでhashSetに値を1つずつ追加します hashSet.add(1); hashSet.add(3); hashSet.add(2); hashSet.add(4); System.out.println("hashSetの全要素: " + hashSet); //Integer型の配列を宣言する。配列の要素数とHashSetのサイズと一致するように。 Integer[] array = new Integer[hashSet.size()]; //HashSetから配列に変換する hashSet.toArray(array); System.out.print("配列の全要素: "); for(Integer temp : array){ System.out.print(temp + " "); } } }
hashSetの全要素: [1, 2, 3, 4] 配列の全要素: 1 2 3 4
5. まとめ
ここまではHashSetについて意味、宣言、使い方、関わるメソッドなどを紹介しました。特に、HashSetの要素の追加・取得・削除仕方は一般的な知識ですので、覚えておいてください。
6. 演習問題
JAVAのHashSetの演習問題