Java HashSet
HashSet は HashMap に基づいて実装されており、重複する要素を許可しない集合です。
HashSet は null 値を許可します。
HashSet は順序付けられておらず、挿入の順序は記録されません。
HashSet はスレッドセーフではありません。複数のスレッドが同時に HashSet を変更しようとすると、最終結果は未確定になります。マルチスレッドでアクセスする場合は、HashSet への同時アクセスを明示的に同期させる必要があります。
HashSet は Set インターフェースを実装しています。
HashSet の要素は実際にはオブジェクトであり、いくつかの一般的な基本型はそのラッパークラスを使用できます。
基本型に対応するラッパークラスの表は次のとおりです:
| 基本型 | 参照型 |
|---|---|
| boolean | Boolean |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
HashSet クラスは java.util パッケージにあり、使用前にインポートする必要があります。構文は次のとおりです:
import java.util.HashSet; // 引入 HashSet 类
次の例では、文字列要素を保存するための HashSet オブジェクト sites を作成します:
HashSet<String> sites = new HashSet<String>();
要素を追加
HashSet クラスは多くの便利なメソッドを提供しています。要素を追加するには add() メソッドを使用できます:
例
import java.util.HashSet;
public class サンプルTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("サンプル");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("サンプル"); // 重複する要素は追加されません
System.out.println(sites);
}
}
上記のコードを実行すると、出力結果は次のとおりです:
[Google, サンプル, Zhihu, Taobao]上記の例では、サンプル が2回追加されていますが、コレクション内では1回だけ出現します。コレクション内の各要素は一意でなければならないためです。
要素が存在するかどうかを判定
contains() メソッドを使用して、要素がコレクション内に存在するかどうかを判定できます:
例
import java.util.HashSet;
public class サンプルTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("サンプル");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("サンプル"); // 重複する要素は追加されません
System.out.println(sites.contains("Taobao"));
}
}
上記のコードを実行すると、出力結果は次のとおりです:
true
要素を削除
remove() メソッドを使用して、コレクション内の要素を削除できます:
例
import java.util.HashSet;
public class サンプルTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("サンプル");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("サンプル"); // 重複する要素は追加されません
sites.remove("Taobao"); // 要素を削除。削除に成功すると true、それ以外は false
System.out.println(sites);
}
}
上記のコードを実行すると、出力結果は次のとおりです:
[Google, サンプル, Zhihu]
コレクション内のすべての要素を削除するには、clear メソッドを使用できます:
例
import java.util.HashSet;
public class サンプルTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("サンプル");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("サンプル"); // 重複する要素は追加されません
sites.clear();
System.out.println(sites);
}
}
上記のコードを実行すると、出力結果は次のとおりです:
[]
サイズを計算
HashSet 内の要素数を計算するには、size() メソッドを使用できます:
例
import java.util.HashSet;
public class サンプルTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("サンプル");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("サンプル"); // 重複する要素は追加されません
System.out.println(sites.size());
}
}
上記のコードを実行すると、出力結果は次のとおりです:
4
HashSet を反復処理
for-each を使用して HashSet 内の要素を反復処理できます。
例
import java.util.HashSet;
public class サンプルTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("サンプル");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("サンプル"); // 重複する要素は追加されません
for (String i : sites) {
System.out.println(i);
}
}
}
上記のコードを実行すると、出力結果は次のとおりです:
Google サンプル Zhihu Taobao
HashSet のよく使用されるメソッド
| メソッド | 戻り値 | 説明 | 例 |
|---|---|---|---|
add(E e) |
boolean |
コレクションに要素を追加し、成功すると true を返しますtrue、重複する要素は false を返しますfalse。 |
set.add("Java"); |
remove(Object o) |
boolean |
指定された要素を削除し、成功すると true を返しますtrue、要素が存在しない場合は false を返しますfalse。 |
set.remove("Python"); |
contains(Object o) |
boolean |
コレクションが指定された要素を含むかどうかを確認します。 | if (set.contains("Java")) { ... } |
size() |
int |
コレクション内の要素数を返します。 | int count = set.size(); |
isEmpty() |
boolean |
コレクションが空であるかどうかを判定します。 | if (set.isEmpty()) { ... } |
clear() |
void |
コレクション内のすべての要素をクリアします。 | set.clear(); |
iterator() |
Iterator<E> |
コレクションのイテレータを返し、要素を走査するために使用します。 | for (String s : set) { ... } |
toArray() |
Object[] |
コレクションを配列に変換します。 | Object[] arr = set.toArray(); |
toArray(T[] a) |
T[] |
コレクションを指定された型の配列に変換します。 | String[] arr = set.toArray(new String[0]); |
addAll(Collection<? extends E> c) |
boolean |
別のコレクションのすべての要素を追加します(和集合操作)。 | set.addAll(Arrays.asList("A", "B")); |
retainAll(Collection<?> c) |
boolean |
指定されたコレクションと共通する要素のみを保持します(積集合操作)。 | set.retainAll(otherSet); |
removeAll(Collection<?> c) |
boolean |
指定されたコレクションと共通する要素を削除します(差集合操作)。 | set.removeAll(otherSet); |
その他の API メソッドは次を参照してください:https://www.example.com/manual/jdk11api/java.base/java/util/HashSet.html
その他の拡張
Java コレクションフレームワーク