我需要一个关于如何在 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只有当数据(几乎)是静态的并且已经排序时,它才是更有效的选择。