我需要一个关于如何在 a 上使用可比较类HashSet
来获得升序的示例。假设我有一个HashSet
这样的:
HashSet<String> hs = new HashSet<String>();
我怎样才能hs
按升序排列?
我需要一个关于如何在 a 上使用可比较类HashSet
来获得升序的示例。假设我有一个HashSet
这样的:
HashSet<String> hs = new HashSet<String>();
我怎样才能hs
按升序排列?
改用 a 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.
如果您拥有的项目本身已经实现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 关于实施的观点Comparable
并表达对 的轻微偏好LinkedHashSet
,它提供“可预测的迭代顺序......而不会增加与 相关的成本TreeSet
。”
附录:@Stephen 提出了一个重要的观点,支持@BalusC 的TreeMap
. LinkedHashSet
只有当数据(几乎)是静态的并且已经排序时,它才是更有效的选择。