繁体   English   中英

订购一个hashset示例?

[英]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只有在数据(几乎)是静态且已经排序的情况下才是更有效的替代方案。

HashSet 不保证迭代顺序

此类实现Set接口,由哈希表(实际上是HashMap实例)支持。 它不能保证集合的迭代顺序; 特别是,它不保证订单会随着时间的推移保持不变。 该类允许null元素。

如果您希望能够控制迭代顺序(或者实际上只有一个!),您可能需要选择不同的数据结构

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM