我想知道是否可以对LinkedHashSet进行排序。我试过了声明
Collections.sort((List<Comparable> paragraph);
然而,这只是抛出一个错误,它不能被转换为List。有没有办法做到这一点,还是应该使用其他数据结构?
答案 0 :(得分:29)
如果您关心基于比较的排序(例如,排序顺序),则应使用SortedSet
,例如TreeSet
或ConcurrentSkipListSet
。
LinkedHashSet
根据广告订单保留订单。
如果您真的想使用Collections.sort
,可以通过实际构建List
将LHS转换为List(虽然问题并没有告诉我们paragraph
的类型所以我我们假设它是String
)
List<String> listParagraph = new ArrayList<String>(paragraph);
Collections.sort(listParagraph)
但这可能不是最好的方法。
答案 1 :(得分:4)
Collections.sort仅适用于Set
,仅适用于List
。如果您需要对Set
中已有的数据进行排序,您可能需要先将它们添加到List
。
答案 2 :(得分:1)
您可以将LinkedHashSet对象(linkedHashSet)添加到TreeSet,它将被排序。
TreeSet<T> treeSet = new TreeSet<t>();
treeSet.addAll(linkedHashSet);
treeSet是有序集。
请注意,您需要使这些T类型具有可比性(通过实现Comparator接口)。
答案 3 :(得分:0)
是的,可以。 Java 8使我们的生活更轻松:)
创建一个链表(对我来说看起来很简单,您可以直接在LinkedHashSet中插入)
LinkedList<String> lList = new LinkedList<String>();
lList.add("Ravi");
lList.add("Vijay");
lList.add("Ravi");
lList.add("Ajay");
lList.add(null);
LinkedHashSet<String> lHashSet = new LinkedHashSet<>();
lHashSet.addAll(lList);
现在排序
lHashSet.stream().sorted((String s1,String s2)->{
return s1.compareTo(s2);
});
//now print it
System.out.println("----");
lHashSet.forEach(action->{
System.out.println(action);
});
System.out.println("----");
输出-
----
Ravi
Vijay
Ajay
null
----
快乐编码:)