我想知道为什么Arrays类的排序方法是要求Object []类型的参数。为什么参数不是类型Comparable []。如果你没有传递一个Comparable []它会产生一个ClassCastException。为什么Arrays.sort采用Object []而不是Comparable []?
为什么...... 公共静态无效的排序(对象[]一),而不是公共静态无效的排序(可比[]一)? 感谢
我想知道为什么Arrays类的排序方法是要求Object []类型的参数。为什么参数不是类型Comparable []。如果你没有传递一个Comparable []它会产生一个ClassCastException。为什么Arrays.sort采用Object []而不是Comparable []?
为什么...... 公共静态无效的排序(对象[]一),而不是公共静态无效的排序(可比[]一)? 感谢
因为第二种形式将需要阵列的重新分配。即使您知道数组只包含可比较对象,但如果原始类型为Object [],则不能将其转换为Comparable [],因为数组类型不匹配。
你可以这样做:
Object[] arr = new String[0];
String[] sarr = (String[]) arr;
但你不能做的:
Object[] arr = new Object[0];
String[] sarr = (String[]) arr;
所以这是过早的优化:)
你必须在Java API的其他地方相同的情况下,例如ObjectOutputStream期望实现Serializable的对象。我想,开发者试图阻止我们做不必要的演员。 – ZeissS
早在当时,就有多人在实施JDK,而不仅仅是Sun。类的实现可能需要Comparable,但允许任何确定性的,稳定的排序。 (假设地说) – Kylar