そのようなものはどこかに存在しますか?基本的に、JavaにはLinkedHashSetがありますが、ナビゲート可能なハッシュセットのタイプはありませんか?
4 に答える
その性質上、ハッシュベースのデータ構造は順序付けされていません。追加のデータ構造でそれを補完するラッパーを書くことができます (これは多かれ少なかれLinkedHashMap
そうです)。しかし、ハッシュ セットとリストを保持することにはある程度の意味がありますが、適切な順序を維持するには、ツリーまたは同様のデータ構造が必要になります。ただし、ツリーはそれ自体でセットとして機能する可能性があるため、本質的に情報を複製することになります (2 つ以上の異なるセットの実装が異なるセットとリストの場合よりも多くなります)。したがって、注文が必要な場合はTreeSet
、または別のものを使用するのが最善の解決策です。SortedSet
TreeSet を使用できますが、その中のすべての操作は lg(n) です
ハッシュセットの上にリンクされたリストを保持するLinkedHashSetを使用できますが、挿入順序のみを維持します(最初に挿入されるのはイテレータの最初の要素になります)。自然順序またはカスタム順序を持つことはできません
TreeSet+HashSet アプローチを使用することもできますが、各要素の 2 つの参照が保持され、追加と削除はまだ lg(n) ですが、内容は期待される o(n) になります。
賢明に選択してください:)
ではありませんが、あなたHashSet
の子孫としてSet
TreeSet
このクラスは、TreeMap インスタンスによってサポートされる Set インターフェースを実装します。このクラスは、ソートされたセットが要素の昇順になることを保証します
イテレータを使用して要素をトラバースできます
public イテレータ イテレータ()
このセット内の要素の反復子を返します。要素は昇順で返されます
私はTreeMapがあると思います...関連していますが、間違いなく同じではありません:)