HashSet
昇順を取得するために、で同等のクラスを使用する方法の例が必要です。私がこのようなものを持っているとしましょうHashSet
:
HashSet<String> hs = new HashSet<String>();
どうすればhs
昇順になりますか?
HashSet
昇順を取得するために、で同等のクラスを使用する方法の例が必要です。私がこのようなものを持っているとしましょうHashSet
:
HashSet<String> hs = new HashSet<String>();
どうすればhs
昇順になりますか?
TreeSet
代わりに使用してください。コンストラクターがありComparator
ます。自動的に並べ替えられますSet
。
をに変換する場合HashSet
はTreeSet
、次のようにします。
Set<YourObject> hashSet = getItSomehow();
Set<YourObject> treeSet = new TreeSet<YourObject>(new YourComparator());
treeSet.addAll(hashSet);
// Now it's sorted based on the logic as implemented in YourComparator.
自分が持っているアイテムがすでに実装されていてComparable
、そのデフォルトの順序がすでに必要なものである場合は、基本的にを指定する必要はありませんComparator
。TreeSet
次に、に基づいて直接構築できHashSet
ます。例えば
Set<String> hashSet = getItSomehow();
Set<String> treeSet = new TreeSet<String>(hashSet);
// Now it's sorted based on the logic as implemented in String#compareTo().
HashSet
「セットの反復順序については保証しません。」LinkedHashSet
代わりに使用してください。
補遺:@ BalusCの実装についての2番目のポイントであり、「に関連するコストの増加を招くことなく、予測可能な反復順序...」を提供Comparable
するのわずかな好みを表現します。LinkedHashSet
TreeSet
補遺:@Stephenは、@BalusCの提案を支持する重要なポイントを提起しTreeMap
ます。LinkedHashSet
データが(ほぼ)静的で、すでにソートされている場合にのみ、より効率的な代替手段です。
HashSetsは反復順序を保証しません:
このクラスは、ハッシュテーブル(実際にはHashMapインスタンス)に裏打ちされたSetインターフェイスを実装します。セットの反復順序については保証されません。特に、順序が時間の経過とともに一定に保たれることを保証するものではありません。このクラスはnull要素を許可します。
反復順序を制御できるようにしたい場合(または実際に1つにしたい場合)は、おそらく別のデータ構造を選択する必要があります。