1

我需要根据特定的索引名称对 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
4

4 回答 4

10

为此使用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);
于 2013-09-17T09:03:06.870 回答
2

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

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

Davekoelle AlphanumComparator.java:http://www.davekoelle.com/files/AlphanumComparator.java _

另一种选择se.sawano alphanumeric-comparatorhttps ://github.com/sawano/alphanumeric-comparator

字母比较器

于 2013-09-17T09:05:54.770 回答
1

Set的顺序没有定义;您无法对集合进行排序。

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

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

于 2013-09-17T09:12:11.763 回答
0

这不是TreeSet的用途吗?

于 2013-09-17T09:05:12.003 回答