方法
public static int binarySearch(Object[] a, Object key)
Arrays 类在其实现中通过二进制搜索算法之后的数组参数导航a
,并将元素转换a
为Comparable
并调用compareTo(key)
,直到找到匹配项或用尽可能性。
但是,我对实现感到困惑,如果该方法总是将元素强制转换为Comparable
,并且ClassCastException
如果遇到未实现的元素还会抛出 a Comparable
,那么 API 用户是否更清楚该方法将仅考虑数组元素的比较器而不考虑键的比较器,通过防止在数组类型与 Comparable 不兼容的情况下进行调用的编译来更加万无一失,并且在以下情况下也更有效地执行该方法被定义为
public static int binarySearch(Comparable[] a, Object key)
? 将第一个参数定义为 Object 数组有什么好处?
编辑我只是在发布问题并且已经回答后才看到这个,但是这里有一个相关的帖子:为什么 Arrays.sort 采用 Object[] 而不是 Comparable[]?他们指出,如果该方法采用参数(Comparable[],Object),则无法在没有“重新分配”的情况下将 Object[] 类型的数组传递给该方法,这也很昂贵。