CodeGym /Java Blog /ランダム /インターフェースとしての Java セット
John Squirrels
レベル 41
San Francisco

インターフェースとしての Java セット

ランダム グループに公開済み
セットとは、単に一意のオブジェクトのコレクションです。一意とは、2 つのオブジェクトが同じ値を持つことができないことを意味します。セットの実装に応じて、注文できる場合と注文できない場合があります。抽象データ型 (ADT) としての Java セットには、いくつかの重要な操作があります (T は、int、String、または任意のクラス オブジェクトなどの任意のデータ型を表します)。 インターフェースとしての Java セット - 1
  • boolean add(T item): 項目がセットに正常に追加された場合は true を返し、項目がすでにセットに含まれていた場合は false を返します。
  • boolean remove(T item): 項目がセットから正常に削除された場合は true を返し、それ以外の場合 (項目がセットに含まれていない場合) は false を返します。
  • boolean contains(T item): 項目がセット内にある場合は true を返し、それ以外の場合は false を返します。
  • boolean isEmpty(): セットが空の場合は true を返し、それ以外の場合は false を返します。
Java のセットには、(当然のことながら) 非常にわかりやすい関数シグネチャがあります。2 つの同一のアイテムをセットに追加すると、最初に追加されたアイテムのみがセットに含まれます。最初に項目が削除されない限り、その後同じ項目を追加しようとしても無視されます。最も一般的に使用される集合演算の 1 つは、項目が指定されたセット内にあるかどうかを確認することです。この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 の例

HashSetJava の と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 の と の両方にHashSetTreeSet、他にもいくつかの便利な関数があります。
  • void clear(): すべてのオブジェクトのセットをクリアします。
  • int size(): セット内のオブジェクトの数を返します。
  • Object clone(): セットの浅いコピーを返します。
  • Iterator iterator(): 最初のオブジェクトから開始してセットの反復子を返します。
「A 学生のリスト」の例でこれらの関数の使用法を見つけることを想像できます。size()「A」学生が何人いるかを確認したい場合、またはclear()学期の終わりにリストをクリアしたい場合に、電話をかけることができます。中間レポート中など、特定の時点で A 人の学生リストのクローンを作成して保持するために使用できますclone()(この方法では、クローンはオリジナルと同様に最新の状態に保たれません)。

Java ハッシュセットの例

Java で使用される a HashSetofの短い例を次に示します。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 で使用される a TreeSetofの短い例を次に示します。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
それで全部です!これがお役に立てば幸いです😊
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION