订购一个hashset示例?

Jon*_*ony 20 java hashset comparable sortedset data-structures

我需要一个关于如何在a上使用类似的类HashSet来获得升序的示例.假设我有HashSet这样一个:

HashSet<String> hs = new HashSet<String>();
Run Code Online (Sandbox Code Playgroud)

我怎样才能hs按升序排列?

Bal*_*usC 45

TreeSet改用.它有一个构造函数Comparator.它会自动排序Set.

如果要将a转换HashSet为a 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.
Run Code Online (Sandbox Code Playgroud)

如果您自己已经实施的项目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().
Run Code Online (Sandbox Code Playgroud)

也可以看看:


tra*_*god 8

HashSet"不保证集合的迭代顺序." 请LinkedHashSet改用.

附录:我将第二个@BalusC关于实施Comparable和表达略微偏好的观点LinkedHashSet,它提供了"可预测的迭代顺序......而不会产生与之相关的增加的成本TreeSet."

附录:@Stephen提出了一个重要的观点,这有利于@BalusC的建议TreeMap.LinkedHashSet只有当数据(几乎)是静态的并且已经排序时,它才是更有效的替代方案.

  • AFAIK,链接的hashset保留(时间)插入顺序.在随机插入的情况下使用链接的哈希集来实现有序集很困难(即效率低下).每次进行随机插入时,您都需要重建整个LinkedHashSet. (2认同)