Sud*_*kar 6 java arrays sorting comparable classcastexception
码:
public class CompareTest {
public static void main(String[] args) {
ArrayList list = new ArrayList();
(list).add(new CompareTest());
Arrays.sort(list.toArray()); //Does not throw Exception , why ?
Collections.sort(list); //throws ClassCastException
}
}
Run Code Online (Sandbox Code Playgroud)
根据Java Doc: Arrays#sort
根据元素的自然顺序,将指定的对象数组按升序排序.数组中的所有元素都必须实现Comparable接口.
为什么阵列#sort,ClassCastException不像JavaDoc所说的那样抛出?
因为源代码Arrays.sort()有这个快捷方式:
int nRemaining = hi - lo;
if (nRemaining < 2)
return; // Arrays of size 0 and 1 are always sorted
Run Code Online (Sandbox Code Playgroud)
因此,它不会检查数组的元素是否实现Comparable,因为它不必对只有一个元素的数组进行排序.
请注意,javadoc不保证抛出ClassCastException.