3

私の懸念は、セットのセット(HashSet)がアイテムの順序もチェックするかどうかです。指定された整数のセットが整数のセットのセットに存在するかどうかをチェックするアプリを作成しました

どういうわけか昨日あるコンピューターで、整数のセットが順序付けられていないことに気づきました(HashSetsについては何が問題ありません)が、心配して、それをチェックするための簡単なメインを書きました:

public static void main(String[] args) {

    Set<Set<Integer>> set1 = new HashSet<Set<Integer>>();
    Set<Integer> set2 = new HashSet<Integer>();
    Set<Integer> set3 = new HashSet<Integer>();

    set3.add(14); set3.add(2); set3.add(9); set3.add(3); set3.add(5);

    set1.add(set3);

    set3 = new HashSet<Integer>();
    set3.add(6); set3.add(7); set3.add(8); set3.add(9); set3.add(10);   
    set1.add(set3);

    set2.add(9); set2.add(14); set2.add(5); set2.add(2); set2.add(3);

    System.out.println(set1);
    System.out.println(set2);
    if(set1.contains(set2)){
        System.out.println(":)");
    }else 
        System.out.println(":(");
}

問題は、このマシンでHashSetが注文されていることを確認することです。出力は次のとおりです。

[[2, 3, 5, 9, 14], [6, 7, 8, 9, 10]]
[2, 3, 5, 9, 14]
:)

だから私の質問は、セットをどのように比較するかです。Bu値のみ?(質問がばかげているように聞こえたらごめんなさい。)

4

2 に答える 2

2

だから私の質問は、セットをどのように比較するかです。Bu値のみ?

はい、2つのを比較する場合、順序は無視されSetます。これは、JavaDocで次のように記述されていSet#equals()ます。

指定されたオブジェクトをこのセットと同等と比較します。指定されたオブジェクトもセットであり、2つのセットが同じサイズであり、指定されたセットのすべてのメンバーがこのセットに含まれている(または、このセットのすべてのメンバーが指定されたセットに含まれている)場合にtrueを返します。この定義により、equalsメソッドがsetインターフェイスのさまざまな実装間で正しく機能することが保証されます。

于 2012-10-17T17:14:13.683 に答える
0

HashSet注文が時間の経過とともに一定に保たれることを保証するものではありません。実際にはハッシュテーブルに支えられています。データを格納するバケットを内部的に維持し、を使用してバケットのハッシュインデックスを生成しhashing algorithmます。多数のデータセットを挿入すると、順序が同じでない場合があります。そして、equalsメソッドを呼び出して、2つのオブジェクト間の同等性をチェックします。

于 2012-10-17T17:16:17.833 に答える