セットとは、単に一意のオブジェクトのコレクションです。一意とは、2 つのオブジェクトが同じ値を持つことができないことを意味します。セットの実装に応じて、注文できる場合と注文できない場合があります。抽象データ型 (ADT) としての Java セットには、いくつかの重要な操作があります (T は、int、String、または任意のクラス オブジェクトなどの任意のデータ型を表します)。
boolean add(T item)
: 項目がセットに正常に追加された場合は true を返し、項目がすでにセットに含まれていた場合は false を返します。boolean remove(T item)
: 項目がセットから正常に削除された場合は true を返し、それ以外の場合 (項目がセットに含まれていない場合) は false を返します。boolean contains(T item)
: 項目がセット内にある場合は true を返し、それ以外の場合は false を返します。boolean isEmpty()
: セットが空の場合は true を返し、それ以外の場合は false を返します。
contains()
関数は、これに対して優れた実行時間を提供します。使用される実装が aHashSet
か aであるかに応じて、O(1) または O(log n) 時間の複雑さになります。TreeSet
、 それぞれ。それでは、セットは何に使用できるのでしょうか? ID、名前、その他の一意の識別子など、多数の個別のオブジェクトを追跡する必要があり、そのようなコレクションにアイテムが存在するかどうかを頻繁に確認する必要がある場合は、セットが適切な選択となる可能性があります。セットの使用例を次に示します。Student
特定のクラスのすべての生徒を表すオブジェクトのリストがあると想像してください。それぞれに、Student
このクラスの一意の名前 (string) とグレード (int) が付いている場合があります。A の生徒全員 (成績が 90 以上) のリストを頻繁に参照したい場合、このリストをループしてすべての生徒の成績を毎回確認するのは面倒です。HashSet
代わりに、次のように、クラス内のすべての A 学生を追跡する文字列の a を使用することもできます。
- 生徒の成績が更新されるたびに、生徒の新しい成績が 90 以上であるかどうかを簡単に確認できます。
- その場合は、次を使用して生徒 A のセットに追加します。
add()
- 彼らがすでに A 学生である場合、この操作は単純に無視されます。
- そうでない場合は、次を使用して A 生徒のセットから生徒を削除します。
remove()
- この時点で学生が A 学生でない場合、この操作は単純に無視されます。
- その場合は、次を使用して生徒 A のセットに追加します。
contains(“Johnny Appleseed”)
セットに電話すれば簡単に確認できます。もちろん、これはセットの使用例の一例にすぎず、A 人の生徒を追跡するというこの特定の問題は他の方法で解決できる可能性があります。
実装: Java の HashSet および Java TreeSet の例
HashSet
Java の とJava の の両方がTreeSet
に含まれていますjava.utils package
。それらは次のようにインポートできます。
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
また
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
JavaHashSet
と Javaの主な違いはTreeSet
、 はTreeSet
ソートされるのに対し、 はHashSet
ソートされないことです。これが、TreeSet
のキー操作の時間計算量が O(log n) であるのに対し、HashSet
時間計算量は O(1) または定数である理由です。TreeSet
常に秩序を維持しなければなりません。前述のキー セット操作に加えて、Java の と の両方にHashSet
はTreeSet
、他にもいくつかの便利な関数があります。
void clear()
: すべてのオブジェクトのセットをクリアします。int size()
: セット内のオブジェクトの数を返します。Object clone()
: セットの浅いコピーを返します。Iterator iterator()
: 最初のオブジェクトから開始してセットの反復子を返します。
size()
「A」学生が何人いるかを確認したい場合、またはclear()
学期の終わりにリストをクリアしたい場合に、電話をかけることができます。中間レポート中など、特定の時点で A 人の学生リストのクローンを作成して保持するために使用できますclone()
(この方法では、クローンはオリジナルと同様に最新の状態に保たれません)。
Java ハッシュセットの例
Java で使用される aHashSet
ofの短い例を次に示します。String
import java.util.HashSet;
class HashSetDemo {
public static void main(String[] args)
{
// create a HashSet of Strings
HashSet<String> hs = new HashSet<String>();
// Add elements using the add() method
hs.add("Collin");
hs.add("Bob");
hs.add("Abigail");
// Duplicates will ignored; this statement is useless
hs.add("Collin");
System.out.println(hs);
System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
System.out.println("Max is in the set (T/F): " + hs.contains("Max"));
}
}
出力: --------
[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Java ツリーセットの例
Java セットの例は、理論を理解するのに役立ちます。Java で使用される aTreeSet
ofの短い例を次に示します。String
import java.util.TreeSet;
class TreeSetDemo {
public static void main(String[] args)
{
// create a TreeSet of Strings
TreeSet<String> ts = new TreeSet<String>();
// Add elements using the add() method.
ts.add("Collin");
ts.add("Bob");
ts.add("Abigail");
// Duplicates will ignored; this statement is useless
ts.add("Collin");
// printing the set prints the names in alphabetical order!
System.out.println(ts);
System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
System.out.println("Size of the set: " + ts.size());
ts.clear();
System.out.println("Size of the set after clear(): " + ts.size());
}
}
出力: -------
[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
それで全部です!これがお役に立てば幸いです😊