我希望根据哈希集中字符串的长度以递减值对哈希值进行排序。
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.']
按降序排序的方法是什么?
答案 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实现,例如TreeSet
。 TreeSet
允许您提供Comparator
,指定如何订购条目;类似的东西:
public class SortByString implements Comparator<FullName>{
public int compare(FullName n1, FullName n2) {
return n1.getLastName().compareTo(n2.getLastName());
}
}