この記事の目次
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の演習問題