HashSet
HashSet
HashSet
1. HashSet
2. HashSet
コンストラクター:
HashSet() デフォルトの等価コンパレーターは、空の新しいインスタンスを作成します。
HashSet(IEnumerable
HashSet(IEqualityComparer
HashSet(IEnumerable
HashSet
以下はその一般的なメソッドの一部の紹介です
メンバー型の説明
Add メソッドは指定された要素をsetに追加します
Clear メソッドはset内のすべての要素をクリアします
Contains メソッドは要素がHashSet
Exists メソッドは、HashSet
ExceptWith メソッドは、指定されたコレクション内のすべての要素を現在のHashSet
IntersectWith メソッドは、このオブジェクトとセット内に存在する指定された要素
オブジェクトが指定されたセットの真のサブセットであるかどうかを決定します
オブジェクトが指定されたセットの真のスーパーセットであるかどうかを決定します
オブジェクトは指定されたセットの子です Set
オブジェクトが指定されたセットのスーパーセットであるかどうかを決定します
オブジェクトから指定された要素を削除します
オブジェクトから削除します指定された述語で定義された条件に一致する HashSet
SetEquals のすべての要素 HashSet
SynmmetricExceptWith メソッドは、現在の HashSet
TrimExcess メソッドは HashSet になります
UnionWithメソッド 現在のHashSet
TreeSet
TreeSetはTreeMapに依存して実装されます。
TreeSet は順序付きセットです。TreeSet 内の要素は昇順に配置されます。これは、TreeSet 内の要素が Comparable インターフェイスを実装する必要があることを意味します。またはカスタムのコンパレータを使用します。
TreeSet オブジェクトを構築するときに、Comparator インターフェイスを実装するコンパレータ オブジェクトを渡すことができます。
TreeSetとHashSetの違い
1. HashSetはHashMapを通じて実装され、TreeSetはTreeMapを通じて実装されますが、SetはMapのキーのみを使用します
2 MapとSetのキーには共通点が1つあります。特徴は、セットの一意性です。
3. HashMap では、ソートの必要がないため、位置決めと一意性だけに注目する必要があります。 a. hashCode ハッシュ値を計算するために使用され、ハッシュ値はハッシュ テーブルのインデックスを決定するために使用されます。チェーン上の各項目を比較するため、オブジェクトはキー値に対応するエントリを実際に見つけることができます。ハッシュ テーブルにない場合は、リンクされたリストの前にエントリを追加します。見つかった場合は、Entry の値を置き換えて古い値を返します。
4. TreeMap はソートする必要があるため、もちろん、Comparator を使用して配置されます。 a. TreeMap の作成時にコンパレーターを指定できます
b. 作成時に決定されない場合は、 key.compareTo() メソッドが使用されます。これには、キーが Comparable インターフェイスを実装する必要があります。 Tree データ構造を使用して実装されているため、比較インターフェイスを使用して位置決めを完了できます。
HashTable
ハッシュテーブル(ハッシュテーブル)は、コンピューター分野では新しい概念ではありません。これらは、今日の基準からすると非常に遅いコンピューター処理を高速化するように設計されており、多くのデータ エントリをクエリするときに特定のエントリをすばやく見つけることができます。 最新のマシンは何千倍も高速ですが、ハッシュテーブルはアプリケーションから最高のパフォーマンスを引き出すための便利なツールです。
Hashtable オブジェクトと HashMap オブジェクトを使用すると、キーと値を組み合わせ、put() メソッドを使用してキーと値のペアをテーブルに入力できます。その後、 get() メソッドを呼び出し、キーをパラメーターとして渡すことで値を取得できます。キーと値は、2 つの基本要件を満たす限り、任意のオブジェクトにすることができます。キーと値はオブジェクトである必要があるため、プリミティブ型は Integer(int) などのメソッドを使用してオブジェクトに変換する必要があることに注意してください。
特定のクラスのオブジェクトをキーとして使用するには、このクラスは 2 つのメソッド、equals() と hashCode() を提供する必要があります。これら 2 つのメソッドは java.lang.Object にあるため、すべてのクラスがこれら 2 つのメソッドを継承できますが、Object クラスでのこれら 2 つのメソッドの実装は通常役に立たないため、通常はこれら 2 つのメソッドを自分でオーバーロードする必要があります。
Equals () メソッドは、そのオブジェクトと別のオブジェクトを比較し、2 つのオブジェクトが同じ情報を表す場合に true を返します。このメソッドは、両方のオブジェクトが同じクラスに属しているかどうかも確認します。 2 つの参照オブジェクトが同一のオブジェクトである場合、Object.equals() は true を返します。これが、このメソッドが一般に適切でない理由を説明しています。ほとんどの場合、フィールドごとに比較する方法が必要となるため、同じデータを表す異なるオブジェクトは等しいと見なされます。
HashCode() メソッドは、オブジェクトの内容を使用してハッシュ関数を実行することによって int 値を生成します。 Hashtable と HashMap は、この値を使用して、キーと値のペアがどのバケット (またはリスト) にあるかを判断します。ハッシュテーブルのパフォーマンス
ハッシュテーブルの効率に影響を与える主な要因はテーブル内のリストの平均長です。平均検索時間はこの平均長に直接関係しているためです。平均長を短くするには、ハッシュテーブル内のリストの数を増やす必要があるのは明らかです。リストの数が多すぎて、ほとんどまたはすべてのリストに 1 つのレコードしか含まれていない場合に、検索効率が最大になります。しかし、これは行き過ぎかもしれません。ハッシュテーブルにデータエントリよりもはるかに多くのリストが含まれている場合は、そのようなメモリコストを支払う必要はなく、場合によっては、人々がこのアプローチを受け入れることが不可能です。
ashtable と HashMap
Hashtable クラスと HashMap クラスには 3 つの重要な違いがあります。最初の違いは主に歴史的な理由によるものです。 Hashtable は古い Dictionary クラスに基づいており、HashMap は Java 1.2 で導入された Map インターフェイスの実装です。
おそらく最も重要な違いは、Hashtable のメソッドは同期的であるのに対し、HashMap のメソッドは同期的ではないことです。つまり、特別な操作を行わずにマルチスレッド アプリケーションでハッシュテーブルを使用できますが、ハッシュマップの外部同期も提供する必要があります。便利な方法は、Collections クラスの静的 synchronizedMap() メソッドを使用することです。このメソッドは、スレッドセーフな Map オブジェクトを作成し、それをカプセル化されたオブジェクトとして返します。このオブジェクトのメソッドを使用すると、基になる HashMap に同期的にアクセスできます。この結果、必要のないとき (シングル スレッド アプリケーションなど) にハッシュテーブルの同期を切断できなくなり、同期により多くの処理オーバーヘッドが追加されます。
3 番目の違いは、テーブル エントリのキーまたは値として null 値を使用できるのは HashMap だけであることです。 HashMap 内の空のキーにできるレコードは 1 つだけですが、任意の数のエントリを空の値にすることができます。これは、検索キーがテーブル内に見つからない場合、または検索キーが見つかってもそれが null 値である場合、get() は null を返すことを意味します。必要に応じて、containKey() メソッドを使用して、これら 2 つの状況を区別します。