六、設定、および格納順序
別のセットは、異なる振る舞いを実装し、要素の特定の型に配置するための設定も異なる要件を持っています。
セット(インターフェース):セットが重複要素を保存していないため、預金の各要素は一意である必要があります設定します。設定の追加要素は、オブジェクトの一意性を保証するために、等号()メソッドを定義しなければなりません。設定し、コレクションはまったく同じインタフェースを持っています。Setインタフェースは、メンテナンスの要素の順序を保証するものではありません。
HashSetの*:すばやく設定を見つけるために設計されています。要素にHashSetの)は、(ハッシュコードを定義しなければなりません。なぜならスピードの最初の選択肢、神秘的なソートはそう。
TreeSetの:オーダー、基礎となるツリー構造を維持するように設定。セットからの順序付けられたシーケンスを抽出するために使用します。要素は、Comparableインタフェースを実装する必要があります。
LinkedHashSetの:HashSetのクエリ速度を有し、そしてリスト要素配列(挿入配列)の内部のメンテナンス。このようにして設定を反復を使用する場合、結果は挿入要素によって順に表示され、要素は、ハッシュコード()メソッドを実装しなければなりません。
あなたは、HashSetのとLinkHashSetだけでのhashCode()メソッドを必要とする()メソッドを設定するために等号を作成する必要があります。しかし、良いプログラミングスタイルは)()hashCodeをオーバーライドされた等号を(書き換え従うべきです。
どのようにカスタム要素の型セットを作成するには:
クラスはsetType { 私は整数。 文字列str; @オーバーライド パブリック ブール等しい(オブジェクトo){ リターン O のinstanceofはsetType &&(i.equals(((はsetType)O).I))&& (str.equals(((はsetType)O)の.str))。 } } クラス HasTypeは延びてはsetTypeを{ / ** *ここでは、ハッシュコードを変更する方法になります: * 1 17の初期値を取ります *すべての重要な分野2.(等しいフィールド()比較の方法は)いくつかの操作を行って: * a.filedHashValue = filed.hashCode()。 * b.result =結果* 31 + filedHashValue。 * / @オーバーライド 公共 int型のハッシュコード(){ int型の結果= 17 。 結果 = 31 *結果+(I == NULL 0?:i.hashCode()); 結果 = 31 *結果+(STR == NULL 0?:str.hashCode()); 戻り値の結果; } } クラス TreeTypeは延びてはsetTypeが実装匹敵<TreeType> { / ** *指定したフィールドを比較する比較 * / @オーバーライド 公共 のint のcompareTo(TreeType引数){ リターン(arg.i <I -1:(arg.i.equals(I)0:?1 ))。 } }
SortedSet(TreeSetの的)