根据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
包含在长度中
答案 0 :(得分:5)
Collections.sort
引用的“自然排序”是Comparable
指定的那个 - String
实现的,并且只定义了一种方法compareTo
。所以,答案在String.compareTo
的定义中。其文件说明:
按字典顺序比较两个字符串。比较基于字符串中每个字符的Unicode值。
词典排序基本上意味着字典排序。基本上,你可以按字母顺序对每个字母进行排序,但如果你的任何一个单词用完字母后仍然被绑定,那么较短的单词就会先出现。
Unicode是每个角色拥有的数值。有关于它的一篇很好的介绍性帖子here(它并不简短,但它不仅可以帮助您了解unicode是什么,还有它存在的原因)。
答案 1 :(得分:3)
String
类实现Comparable接口。排序发生时,调用compareTo(String)
方法。有关String类中compareTo(String)
方法的实现的更多信息。