2010-02-11 19 views
17

我想知道为什么Arrays类的排序方法是要求Object []类型的参数。为什么参数不是类型Comparable []。如果你没有传递一个Comparable []它会产生一个ClassCastException。为什么Arrays.sort采用Object []而不是Comparable []?

为什么...... 公共静态无效的排序(对象[]一),而不是公共静态无效的排序(可比[]一)? 感谢

+0

你必须在Java API的其他地方相同的情况下,例如ObjectOutputStream期望实现Serializable的对象。我想,开发者试图阻止我们做不必要的演员。 – ZeissS

+0

早在当时,就有多人在实施JDK,而不仅仅是Sun。类的实现可能需要Comparable,但允许任何确定性的,稳定的排序。 (假设地说) – Kylar

回答

8

因为第二种形式将需要阵列的重新分配。即使您知道数组只包含可比较对象,但如果原始类型为Object [],则不能将其转换为Comparable [],因为数组类型不匹配。

你可以这样做:

Object[] arr = new String[0]; 
String[] sarr = (String[]) arr; 

但你不能做的:

Object[] arr = new Object[0]; 
String[] sarr = (String[]) arr; 

所以这是过早的优化:)

4

,否则你不能在通过Object[]

+1

@BalusC是否有过这样一种情况,您可以通过对不知道所有实现“可比较”的对象数组进行排序?任何对排序方法的使用都是由“Comparable”对象组成。看起来像接受Object []的唯一原因是'Object'被更频繁地使用,并且更加熟悉,就像ZeissS说的那样,否则我们将不得不施放。 –

+5

在Java API中仍然有很多'toArray()'方法返回'Object []'。 – BalusC

+1

他们可能正在实施'Comparator ',它与'Comparable '类似,但不一样, – chama

相关问题