使用collections.sort()方法

时间:2015-04-28 05:39:36

标签: java arrays collections scjp

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

鉴于下面的程序,我无法理解排序是因为内部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 
        }
    }
}

此外,我尝试调试代码,这为我创造了一个新的疑问:数组的长度变为4而不是3,因为collections.sort包含在长度中

2 个答案:

答案 0 :(得分:5)

Collections.sort引用的“自然排序”是Comparable指定的那个 - String实现的,并且只定义了一种方法compareTo。所以,答案在String.compareTo的定义中。其文件说明:

  

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

词典排序基本上意味着字典排序。基本上,你可以按字母顺序对每个字母进行排序,但如果你的任何一个单词用完字母后仍然被绑定,那么较短的单词就会先出现。

Unicode是每个角色拥有的数值。有关于它的一篇很好的介绍性帖子here(它并不简短,但它不仅可以帮助您了解unicode是什么,还有它存在的原因)。

答案 1 :(得分:3)

String类实现Comparable接口。排序发生时,调用compareTo(String)方法。有关String类中compareTo(String)方法的实现的更多信息。