22

我想知道是否可以对 LinkedHashSet 进行排序。我已经尝试过声明

Collections.sort((List<Comparable> paragraph);

但是,这只会引发一个错误,即无法将其转换为列表。有没有办法做到这一点,或者我应该使用另一个数据结构?

4

4 回答 4

31

如果您关心基于比较的排序(例如,排序顺序),您应该使用SortedSet诸如此类。TreeSetConcurrentSkipListSet

ALinkedHashSet保留基于插入顺序的顺序

如果您真的想使用Collections.sort,您可以通过实际构造 a 将 LHS 转换为 List List(尽管问题没有告诉我们的类型,paragraph所以我假设它是String

List<String> listParagraph = new ArrayList<String>(paragraph);
Collections.sort(listParagraph)

但这可能不是最好的方法。

于 2013-06-28T18:01:47.690 回答
4

Collections.sort不适用于Sets,仅适用于Lists。如果您需要对 a 中已有的数据进行排序Set,您可能需要先将它们添加到 aList中。

于 2013-06-28T18:00:04.700 回答
2

您可以将 LinkedHashSet 对象(linkedHashSet)添加到 TreeSet,它将被排序。

TreeSet<T> treeSet = new TreeSet<t>();
treeSet.addAll(linkedHashSet);

treeSet 是排序集。

请注意,您需要使这些 T 类型具有可比性(通过实现 Comparator 接口)。

于 2013-06-28T18:09:06.740 回答
1

是的你可以。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
----

快乐编码:)

于 2018-12-21T18:04:35.333 回答