设置vs列表java中的字母顺序

时间:2012-08-16 07:47:01

标签: java list set

Arent列出了有序集合,并且没有订购?那么为什么这个程序按字母顺序对字符串进行排序而不是列表?我理解两者的重复部分。

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

输出:ILLUSIONS


    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

3 个答案:

答案 0 :(得分:7)

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

  • TreeSet是一个特定的Set,可以使其元素保持自然“排序”的顺序。
  • LinkedHashSet是特定Set 保留广告订单。

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

Collections.sort(list);

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

上的相关Javadoc

答案 1 :(得分:4)

如果您说List是有序的,那么它实际上只是意味着列表保留了插入元素的顺序以及可以检索它们的顺序。

Set没有订购,它的重点只是拥有独特的元素。 TreeSet是一个SortedSet,它与维护唯一性一起,也按排序顺序维护元素。因此,你看到上面的结果

答案 2 :(得分:1)

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

java.util.Collections.sort(myList);