以递减方式对哈希集进行排序

时间:2014-02-10 05:49:18

标签: java sorting

我希望根据哈希集中字符串的长度以递减值对哈希值进行排序。

HashSet<String> hs = new HashSet<String>();
hs.add("The World Tourism Organization");
hs.add("reports the following ten countries");
hs.add("as the most visited in terms of the number");
hs.add("of international travellers.");
System.out.println(hs);

我的输出应该是

['as the most visited in terms of the number',
 'reports the following ten countries',
 'The World Tourism Organization',
 'of international travellers.']

按降序排序的方法是什么?

4 个答案:

答案 0 :(得分:2)

根据定义,HashSet不对其成员进行排序。你想要的是一个TreeSet。

如果你有一个hashset,你可以从中创建一个treeset,只要这些对象是Comparable:

  

TreeSet ts = new TreeSet(hs);

答案 1 :(得分:2)

您应该使用TreeSet而不是hashset或创建比较器来对您的集合进行排序

答案 2 :(得分:0)

您需要使用TreeSet代替HashSet和您自己的自定义比较器,它会根据长度对值进行排序。

Set<String> yourSet = new TreeSet<>(new Comparator<String>() {
    public int compare(String o1, String o2) {
        // Your comparison logic goes here
        return 0;
    }
});

// Add all the HashSet values to the TreeSet
yourSet.addAll(hs);

答案 3 :(得分:0)

HashSet没有为条目提供任何有意义的顺序。文档说:

它不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。

要获得合理的排序,您需要使用其他Set实现,例如TreeSetTreeSet允许您提供Comparator,指定如何订购条目;类似的东西:

public class SortByString implements Comparator<FullName>{
    public int compare(FullName n1, FullName n2) {
        return n1.getLastName().compareTo(n2.getLastName());
    }
}