使用collections.sort()方法对字符串进行排序

kit*_*ttu 0 java arrays collections scjp

根据文档:此实现将指定的列表转储到数组中,对数组进行排序,并迭代列表,从数组中的相应位置重置每个元素

鉴于下面的程序,我无法理解排序是因为内部jvm如何判断该字母'A'是小于还是大于字母'a'?由于这是一个字符串,字母不会在ascii值中假定,所以排序是如何发生的?

public class LetterASort {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList();
        strings.add("aAaA");
        strings.add("AaA");
        strings.add("aAa");
        strings.add("AAaa");
        Collections.sort(strings);
        for (String s : strings) 
        { 
        System.out.print(s + " "); //prints AAaa AaA aAa aAaA 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试调试代码,这给我带来了新的疑问:数组的长度变成了4而不是3,因为collections.sort它包含在长度中

ysh*_*vit 5

Collections.sort引用的"自然顺序" 是指定的Comparable- String实现,并且只定义一个方法compareTo.所以,答案在于定义String.compareTo.其文件说明:

按字典顺序比较两个字符串.比较基于字符串中每个字符的Unicode值.

词典排序基本上意味着字典排序.基本上,你可以按字母顺序对每个字母进行排序,但是如果你在任何一个单词用完字母时仍然被绑定,则较短的单词首先出现.

Unicode是每个字符具有的数值.有一个关于一个伟大的介绍后这里(这不算短,但它确实走你通过一个良好的工作unicode是不是正是,但为什么它的存在).