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
它包含在长度中
Collections.sort
引用的"自然顺序" 是指定的Comparable
- String
实现,并且只定义一个方法compareTo
.所以,答案在于定义String.compareTo
.其文件说明:
按字典顺序比较两个字符串.比较基于字符串中每个字符的Unicode值.
词典排序基本上意味着字典排序.基本上,你可以按字母顺序对每个字母进行排序,但是如果你在任何一个单词用完字母时仍然被绑定,则较短的单词首先出现.
Unicode是每个字符具有的数值.有一个关于一个伟大的介绍后这里(这不算短,但它确实走你通过一个良好的工作unicode是不是正是,但为什么它的存在).