java list排序出错

来源:百度知道 编辑:UC知道 时间:2024/06/03 21:02:54
对list中的字符串数据排序:

public class aaa {

/**
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("34324324");
list.add("324");
list.add("3");
list.add("4563453");
Collections.sort(list);

for (String s : list) {
System.out.println(s);
}
}
}

排序结果
3
324
34324324
4563453

为什么呢

实际是字符串的比较排序,你的目的可能是数字的排序,那么,就应该在List中使用数字,如:
list.add(34324324);
list.add(324);
list.add(3);
list.add(4563453);

并没有出错.你使用了Collections.sort对List进行了自然排序,也就是升序排序.由于比较的对象是String,所以应该按字符的Unicode值进行排序.

比如说"abd","ace","bdr"要进行sort排序的话,比较字符的Unicode值. 应该是这样的"abd","ace","bdr". (和原顺序一样)

因为a在字典查询顺序中排在最前面,其次是b,所以"abd"排在第一位,c在b的后面,经过比较之后,第二位应该是"ace",.....
由于你写的字符串中是数字,同样按照字符的Unicode值进行排序.
先进行首位数字的比较,得到3在前4在后 (因为3最小)
接着进行第二位的比较,依次类推,
进行排序,输出上面的内容. (注意这可不是按照数字的大小排的,如果你有一个数是5,则5应该排在最后,即
3
324
34324324
5

实际上,Collections.sort对List进行了自然排序是因为你比较的对象String实现了Comparable接口的compareTo(Object o)方法,所以你能按照自然排序比较大小.否则如果你比较的对象没有实现Comparable接口,你调用Collections.sort(list); 是会抛出异常的

你是想比较数字大小吧,你写成比较String了,我给你改了一下

import java.util.Collections;
import java.util.*;

public class aa {

/**