对LinkedHashSet进行排序

时间:2013-06-28 17:58:48

标签: java sorting

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

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

然而,这只是抛出一个错误,它不能被转换为List。有没有办法做到这一点,还是应该使用其他数据结构?

4 个答案:

答案 0 :(得分:29)

如果您关心基于比较的排序(例如,排序顺序),则应使用SortedSet,例如TreeSetConcurrentSkipListSet

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
----

快乐编码:)