Pah*_*ora 36 java sorting arraylist
这是一个ArrayList的简单排序程序:
ArrayList<String> list = new ArrayList<String>();
list.add("1_Update");
list.add("11_Add");
list.add("12_Delete");
list.add("2_Create");
Collections.sort(list);
for (String str : list) {
System.out.println(str.toString());
}
Run Code Online (Sandbox Code Playgroud)
我期待这个程序的输出为:
1_Update
2_Create
11_Add
12_Delete
Run Code Online (Sandbox Code Playgroud)
但是当我运行这个程序时,我得到输出为:
11_Add
12_Delete
1_Update
2_Create
Run Code Online (Sandbox Code Playgroud)
为什么这样,如何让ArrayList按预期输出显示排序?
nsa*_*yer 70
你可以编写一个自定义比较器:
Collections.sort(list, new Comparator<String>() {
public int compare(String a, String b) {
return Integer.signum(fixString(a) - fixString(b));
}
private int fixString(String in) {
return Integer.parseInt(in.substring(0, in.indexOf('_')));
}
});
Run Code Online (Sandbox Code Playgroud)
当您将此类数据排序为字符串时,它会比较字符本身,包括数字.例如,所有以"1"开头的字符串将一起结束.所以订单最终与此类似......
1 10 100 2 20 200
在任何时候,排序都"实现"您正在为字符串的子集分配含义,例如字符串前面的可变长度数字.将数字排序为字符串时,用尽可能多的零填充左侧以覆盖最大数字可能会有所帮助,但是当您不控制数据时,它并没有真正解决问题,如您的示例所示.在那种情况下,排序将是......
001 002 010 020 100 200
| 归档时间: |
|
| 查看次数: |
84889 次 |
| 最近记录: |