【问题标题】:Sorting Set<String> based on index names in java基于 java 中的索引名称对 Set<String> 进行排序
【发布时间】:2013-09-17 09:00:44
【问题描述】:

我需要根据特定的索引名称对 Set 数据进行排序。我有以下数据:

txt_4: somevalue
txt_2: somevalue
txt_1: somevalue
txt_0: somevalue
txt_3: somevalue

如何对这些数据进行排序?谢谢。

更新:

排序后的预期数据:

txt_0: somevalue
txt_1: somevalue
txt_2: somevalue
txt_3: somevalue
txt_4: somevalue

【问题讨论】:

  • 使用TreeSet,它将被整理出来。
  • 您应该编写自己的Comparator 并使用有序的集合,例如TreeSet.

标签: java sorting set


【解决方案1】:

为此使用TreeSet 对象。

TreeSet 元素使用它们的自然顺序进行排序,或者通过在集合创建时提供的 Comparator 进行排序,具体取决于使用的构造函数。

     Set<String> treeSet = new TreeSet<String>();
     treeSet.add("txt_4: somevalue");
     treeSet.add("txt_1: somevalue");
     treeSet.add("txt_0: somevalue");
     treeSet.add("txt_3: somevalue");
     System.out.println(treeSet);

【讨论】:

  • 感谢您的回答,但我想在问题的UPDATE 部分对其进行排序。我在创建问题时忘记提及了
  • @Dozent 请尝试我的回答一次。它会给出你预期的结果。
【解决方案2】:

使用比较器的完美解决方案:字母算法

人们对带有数字的字符串进行排序的方式与软件不同。大多数排序算法比较 ASCII 值,这会产生与人类逻辑不一致的排序。以下是解决方法。 请参阅:http://www.davekoelle.com/alphanum.html

Davekoelle AlphanumComparator.javahttp://www.davekoelle.com/files/AlphanumComparator.java

另一种选择se.sawano 字母数字比较器:https://github.com/sawano/alphanumeric-comparator

【讨论】:

    【解决方案3】:

    Set的顺序没有定义;你不能对集合进行排序。

    您可以将集合中的元素添加到定义顺序的数据结构(例如 List)中,然后对其进行排序。

    或者,您可以使用已按排序顺序维护其元素的集合实现。其中包括 TreeSet 和 ConcurrentSkipListSet。但请记住,这些实现比您现在可能使用的更复杂,并且可能会减慢程序的其余部分。

    【讨论】:

    • 实际上将 set 添加到列表 ArrayList 我计划作为下一步,但我想像UPDATE 部分问题一样首先订购它。有什么想法吗?
    • 您不能影响集合中元素的顺序。先将集合的元素添加到列表中,然后用Collections.sort对列表进行排序。
    【解决方案4】:

    这不是TreeSet 的用途吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 2015-02-18
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多