我需要根据特定的索引名称对 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对象。
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);
使用比较器的完美解决方案:Alphanum 算法
人们对带有数字的字符串进行排序的方式与软件不同。大多数排序算法比较 ASCII 值,这会产生与人类逻辑不一致的排序。这是修复它的方法。见:http ://www.davekoelle.com/alphanum.html
Davekoelle AlphanumComparator.java:http://www.davekoelle.com/files/AlphanumComparator.java _
另一种选择是se.sawano alphanumeric-comparator:https ://github.com/sawano/alphanumeric-comparator
Set的顺序没有定义;您无法对集合进行排序。
您可以做的是将集合中的元素添加到定义顺序的数据结构中,例如 List,然后对其进行排序。
或者,您可以使用已经按排序顺序维护其元素的集合实现。其中包括 TreeSet 和 ConcurrentSkipListSet。但请记住,这些实现比您现在可能使用的更复杂,并且可能会减慢程序的其余部分。
这不是TreeSet的用途吗?