【问题标题】:Sets vs Lists Alphabetical order in javaJava中的集合与列表按字母顺序排列
【发布时间】:2012-08-12 13:02:00
【问题描述】:

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

【问题讨论】:

  • 您是否将排序与排序混合在一起?它们是两种不同的东西:)
  • 查看 JCF 官方文档,它非常详尽,会回答您所有的问题。

标签: java list set


【解决方案1】:

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

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

如果您想“订购”您的清单,您必须手动完成:

Collections.sort(list);

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

【讨论】:

  • @user193113:我认为aishwarya's answer 很好地解释了List 和Set 之间的主要区别......
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    java.util.Collections.sort(myList);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 2020-03-29
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多