2

値を追加し始めると、Set<Integer>ソート要素が得られます。次の例を参照してください。

Set<Integer> generated = new HashSet<Integer>();
generated.add(2);
generated.add(1);
generated.add(0);

ここで sorting を取得しSet [0, 1, 2]ます。オブジェクトに追加するときに値を取得したいと思いgeneratedます。

4

4 に答える 4

2

は要素のHashSet順序を保証しません。JavaDocから:

セットの反復順序については保証されません。特に、順序が長期的に一定であることを保証するものではありません。

したがって、順序を保証するためLinkedHashSetに使用できます。JavaDocから:

Set インターフェイスのハッシュ テーブルとリンク リストの実装。反復順序は予測可能です。

このリンクされたリストは、要素がセットに挿入された順序 (挿入順序) である反復順序を定義します。

Set次のようにインスタンス化するだけです。

Set<Integer> generated = new LinkedHashSet<>();
于 2015-02-07T16:58:19.250 に答える
2

AHashSetには、予測可能な要素の順序がありません。a を使用しLinkedHashSetて、セット内の要素の挿入順序を保持します。

Set インターフェイスのハッシュ テーブルとリンク リストの実装。反復順序は予測可能です。

Set<Integer> generated = new LinkedHashSet<Integer>();
generated.add(2);
generated.add(1);
generated.add(0);
于 2015-02-07T16:54:10.253 に答える
2

まず、ソートされた値を初めて取得するのは単なる偶然です。そのコードを複数回実行すると、出力がランダムな順序で表示されます。これHashSetは、追加する要素に対して a が順序付けを強制しないためです。

LinkedHashSet挿入した順序で要素を取得するには、挿入順序を維持するを使用できます。

于 2015-02-07T16:55:24.893 に答える
0

まず、質問のタイトルに関してはSet<Integer>、宣言タイプのみであり、並べ替え/並べ替えの動作には責任がありません。インターフェイスを使用する主な理由は、Set一意性を気にする場合です。Javadocs からの重複、追加情報は許可されません

セットは、重複する要素を含むことができないコレクションです。

第二に、HashSet並べ替えられたセットを取得したことは純粋な確信です。それを反復処理するときに順序を気にしない場合に使用します。javadocsからの詳細情報:

セットの反復順序については保証されません。特に、順序が長期的に一定であることを保証するものではありません。このクラスは null 要素を許可します。

第三に、あなたが探しているものに関して:

生成されたオブジェクトに追加するときに値を取得したいと思います。

次に、再びjavadocsLinkedHashSetから、要素が挿入された順序を処理する whichを使用する必要があります。

このリンクされたリストは、要素がセットに挿入された順序 (挿入順序) である反復順序を定義します。要素がセットに再挿入されても、挿入順序は影響を受けないことに注意してください

次のように簡単に使用できます。

Set<Integer> generated = new LinkedHashSet<Integer>();

Fourth and Lastは、追加情報として、知っておく必要があるもう 1 つの重要なコレクションとしてTreeSet、要素が自然順序に従って昇順でソートされることを保証するjavadocsです。

要素は、使用されるコンストラクターに応じて、自然な順序付けを使用するか、セットの作成時に提供される Comparator によって順序付けられます。

于 2015-02-07T17:14:00.220 に答える