[英]ordering a hashset example?
我需要一个关于如何在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
。 然后,您可以直接根据HashSet
构造TreeSet
。 例如
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
只有在数据(几乎)是静态且已经排序的情况下才是更有效的替代方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.