違いを詳しく説明する前に、HashSet と TreeSet が何であるかを簡単に確認しましょう。
HashSet は、ストレージにハッシュ テーブルを使用するコレクションです。 Set インターフェイスを実装します。つまり、要素の重複は許可されません。要素は順序付けされておらず、並べ替えられていないため、HashSet は高速な検索、挿入、削除が必要なシナリオに適しています。
TreeSet は、NavigableSet インターフェイスを実装するコレクションです。格納には Red-Black ツリーが使用されます。これは、要素が並べ替えられ、順序付けられた方法で格納されることを意味します。 TreeSet も要素の重複を許可しませんが、要素の自然な順序を維持する必要がある状況には理想的です。
HashSet : 内部的にハッシュ テーブルを使用します。各要素のハッシュ コードは、その格納場所を決定するために使用されます。 2 つの要素が同じハッシュ コードを持つ場合、チェーンまたはプローブと呼ばれる手法が衝突を処理するために使用されます。
コード例:
Set<String> hashSet = new HashSet<>(); hashSet.add("Apple"); hashSet.add("Banana"); hashSet.add("Mango");
TreeSet : 赤黒ツリーを内部的に使用します。各要素はその自然な順序または提供されたコンパレータに従って配置され、ツリーのバランスが保たれるようにします。
コード例:
Set<String> treeSet = new TreeSet<>(); treeSet.add("Apple"); treeSet.add("Banana"); treeSet.add("Mango");
HashSet と TreeSet はどちらも要素の重複を許可しません。ただし、重複を検出する方法が異なります。 HashSet は hashCode () および equals () メソッドを使用しますが、TreeSet は compareTo () または Comparator。
HashSet と LinkedHashSet : HashSet は順序を保証しませんが、LinkedHashSet は挿入順序を維持します。一方、 TreeSet は、要素を自然に、またはカスタム コンパレータによって並べ替えます。
以下のコード スニペットを実行すると、反復順序の違いがわかります。
// HashSet Example Set<String> hashSet = new HashSet<>(); hashSet.add("Zebra"); hashSet.add("Apple"); hashSet.add("Mango"); System.out.println("HashSet: " + hashSet); // Output may be unordered, e.g., [Apple, Mango, Zebra] // TreeSet Example Set<String> treeSet = new TreeSet<>(); treeSet.add("Zebra"); treeSet.add("Apple"); treeSet.add("Mango"); System.out.println("TreeSet: " + treeSet); // Output will be sorted, e.g., [Apple, Mango, Zebra]
HashSet と TreeSet のどちらを選択するかは、結局のところ、特定のニーズに応じて決まります。
ご質問はありますか?以下にお気軽にコメントを書き込んでください。
で投稿の詳細をお読みください: Java における HashSet と TreeSet の主な違いトップ 10
以上がJava における HashSet と TreeSet の主な違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。