3

Arent 列出有序集合,而 Sets 没有有序?那么为什么这个程序用Sets而不是Lists按字母顺序对String进行排序呢?我了解两者的重复部分。

    PrintStream out = System.out;

    List<String> set = new ArrayList<String>();
    String s = "ILLUSIONS";

    for(int i = 0; i< s.length(); i++)
    {
        set.add((new Character(s.charAt(i))).toString());

    }
    out.println(set);

输出:幻觉


    PrintStream out = System.out;

    Set<String> set = new TreeSet<String>();
    String s = "ILLUSIONS";

    for(int i = 0; i< s.length(); i++)
    {
        set.add((new Character(s.charAt(i))).toString());

    }
    out.println(set);

输出:ILNOSU

4

3 回答 3

7

列表按元素索引“排序”。这意味着它们保留了元素的插入顺序。集合(通常)不保留这样的顺序。一些例外:

  • TreeSet是一个特殊的,Set它将其元素保持在自然“排序”的顺序中。
  • LinkedHashSet是一个特殊的Set,它确实保留了插入顺序。

如果您想“订购”您的清单,您必须手动执行此操作:

Collections.sort(list);

事实上,通过“排序”列表,您将重新排列所有列表元素索引。请参阅相关的 JavadocCollections.sort()

于 2012-08-16T07:48:54.407 回答
4

当您说 List 是有序的时,它实际上只是意味着列表保留了插入元素的顺序,并且可以检索它们的顺序是可预测的。

一个 Set 没有顺序,它的重点只是拥有独特的元素。TreeSet 是一个 SortedSet,它在保持唯一性的同时,还以排序顺序维护元素。因此,您在上面看到的结果

于 2012-08-16T07:57:05.407 回答
1

是的,列表是有序的,这意味着迭代器返回项目的顺序是明确定义的(它将按照插入的顺序返回项目)。如果您希望以不同的顺序(例如字母顺序)返回项目,那么您需要明确对列表进行排序:

java.util.Collections.sort(myList);
于 2012-08-16T07:50:12.337 回答