java.util.Set インターフェイスは java.util.List インターフェイスと同じです。Collection インターフェイスからも継承されます。基本的に Collection インターフェイスのメソッドと同じです。Collection を機能的に拡張しません。インターフェイスですが、Collection インターフェイスよりも高度です。 List インターフェイスとは異なり、Set インターフェイスの要素には順序がなく、保存された要素が繰り返されないように特定のルールが使用されます。
#Set コレクションには複数のサブクラスがあります。ここでは、そのうちの 2 つ、java.util.HashSet と java.util.LinkedHashSet を紹介します。 。 #特徴: 保存された要素が繰り返されず、Set インターフェイスの要素が順序付けされていないことを保証するために、特定のルールが使用されます。
①要素は繰り返されません
②要素 順序なし (順序なしアクセスを指します)
#ハッシュ テーブル: カスタム オブジェクトがハッシュ テーブルに格納されている限り、カスタム オブジェクトが属するクラスは hashCode&equals メソッドをオーバーライドする必要があります⑴HashSet コレクション
最下層は、HashMap を通じて実装された基礎となる新しい HashMap オブジェクトです。統一アドレスを指すためにキーのみが使用され、値 value は使用されません new Object( )
API の概要:
java.util.HashSet は Set インターフェイスの実装クラスであり、格納される要素は反復不可能であり、要素は順序付けされていません(つまり、アクセス順序が矛盾しています)。 java.util.HashSet の基礎となる実装は、実際には java.util.HashMap サポートです。HashSet は、オブジェクトのハッシュ値に基づいてコレクション内の要素の格納場所を決定するため、アクセスと検索のパフォーマンスが優れています。要素の一意性を確認する方法は、hashCode メソッドと equals メソッドに依存します。
特徴:
①要素が重複しない
②アクセス順序が一定しない③アクセス性と検索性能が良好④要素の一意性の方法は次の要素に依存します: hashCode とquals メソッド
データを格納する HashSet コレクション (ハッシュ テーブル) の構造:
以前の JDK1 .8 では、ハッシュ テーブルの最下層が配列リンク リストを使用して実装されていました。競合を処理するためにリンク リストが使用された場合でも、同じハッシュ値を持つ
リンク リストはすべて 1 つのリンク リストに格納されていました。しかし、バケット内の要素数が多い場合、、つまりハッシュ値が等しい要素が多い場合、キー値で順番に検索するのは効率が悪くなります。 JDK1.8 では、ハッシュ テーブルの保存は配列リンク リスト赤黒ツリーによって実装されています。リンク リストの長さがしきい値 (8) を超えると、リンク リストは赤黒ツリーに変換され、検索時間が大幅に短縮されました。 つまり、JDK1.8 での赤黒ツリーの導入により、HashMap のパフォーマンスが大幅に最適化されました。つまり、HashSet コレクション要素が一意であることを保証するために、実際にはオブジェクトの# に基づいて、##hashCode メソッドと equals メソッドが決定されます。カスタム オブジェクトをコレクション
に格納してその一意性を確保する場合は、hashCode メソッドと equals メソッドをオーバーライドして、現在のオブジェクトに属する比較メソッドを確立する必要があります。
概要: 1.8 より前では、ハッシュ テーブルの最下層は配列リンク リストを使用して実装されていました。
1.8 では、ハッシュ テーブル ストレージは配列リンク リストの赤黒ツリーを使用して実装されました。 (リンク リストの長さがしきい値 (8) を超える場合、リンク リストを赤黒ツリーに変換します。これにより、検索時間が大幅に短縮されます) 要素が一意であることを保証するには、hashCode メソッドと等しいメソッドを次のように書き換える必要があります。現在のオブジェクトに属する比較メソッドを確立します。
HashSet はカスタム タイプの要素を格納します (強調) :
カスタム タイプの要素を HashSet に格納する場合、オブジェクト内の hashCode メソッドと equals メソッドを書き直す必要があります。 .
HashSet コレクション内のオブジェクトが一意であることを確認する独自の比較メソッドを確立します
⑵LinkedHashSetHashSet は要素が一意であることを確認します。しかし、要素は順不同で格納されています。したがって、順序性を確保する必要があります。どうすればよいでしょうか? HashSet .util.LinkedHashSet の下にサブクラス java があり、これはリンク リストとハッシュ テーブルを組み合わせたデータ格納構造です。
以上がJavaセットとはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。