我正在尝试对由数字和字母组成的字符串的arylylist进行排序,列表的一个例子一旦排序将是:
name 1
name 2
name 3
name 11
name 12
name 13
但是当我使用collections.sort()时,它会这样排序:
name 1
name 11
name 12
name 13
name 2
name 3
任何想法,我正在寻找的那种类型将会被调用或者它是如何实现的?
答案 0 :(得分:7)
String
默认按字母顺序排序。您需要实现自己的Comparator<String>
或使用实现Comparable
的对象(或使用Comparator
来解决此问题),尤其是在您使用的String
之后是单词和整数的混合。
答案 1 :(得分:1)
实现comprable,覆盖compareTo,将名称解析出来然后你可以按它们排序。你想按数字或两者排序吗?
答案 2 :(得分:1)
这是因为它按字母顺序排序,一次查找一个字符。
name 13
name 2
此处,“name
”是相同的部分,向前移动,您有“1
”和“2
”。 1
出现在2
之前。请记住13
和2
只是字符串而不是数字。
你可以write your own comparator。为了实现你的目标。
答案 3 :(得分:0)
您可以使用HashMap<Integer,String> map
并对其进行排序
答案 4 :(得分:0)
根据他人的建议,您可以编写自己的Comparator
,如下所示
Comparator<? super String> myComparator = new Comparator<String>() {
public int compare(String name1, String name2) {
int num1 = Integer.parseInt(name1.split(" ")[1]);
int num2 = Integer.parseInt(name2.split(" ")[1]);
// > : Increasing order
// < : Decreasing order
if(num1 < num2)
return 1;
else
return -1;
}
};
Collections.sort(names, myComparator);
输出:
姓名91
名称12
名称11
名称2