当前位置: 首页 > 面试题库 >

为什么Arrays.sort使用Object []而不是Comparable []?

刘浩思
2023-03-14
问题内容

我想知道为什么Arrays类的sort方法要求一个Object []类型的参数。为什么参数不是Comparable []类型。如果不传递Comparable
[],它将生成ClassCastException。

为什么… public static void sort(Object [] a) 而不是 public static void
sort(Comparable [] a)
?谢谢


问题答案:

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

你可以做:

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

但是你不能做:

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

所以这是过早的优化:)



 类似资料:
  • 我使用的是JDK-8(x64)。对于<code>数组。sort</code>(原语)我在Java文档中找到了以下内容: 排序算法是弗拉基米尔·雅罗斯拉夫斯基、乔恩·本特利和约书亚·布洛赫的双轴快速排序。' 对于<code>集合。sort(对象)我找到了这个“Timsort”: 这个实现是一个稳定的、自适应的、迭代的合并…这个实现将指定的列表转储到一个数组中,对数组进行排序,并迭代列表,从数组中的相

  • 问题内容: 我正在使用JDK-8(x64)。对于(原始),我在Java文档中发现了以下内容: 排序算法是Vladimir Yaroslavskiy,Jon Bentley和Joshua Bloch编写的Dual-Pivot Quicksort 。 对于(对象),我找到了“ Timsort”: 此实现是一个稳定的,自适应的,迭代的 mergesort 。此实现 将指定的列表转储到数组中,对数组进行排

  • 问题内容: 为什么不: 代替: 获得唯一哈希码的更高机会? 问题答案: 因为数组的最大长度为。 由于的主要用途是确定将对象插入/ 的后备数组中的哪个插槽,因此hashcode> 将无法存储在该数组中。

  • 很多人问了此问题,说bzero已经被posix-2008废弃,为何还使用bzero。选择bzero而不是memset,有2个原因: bzero有2个参数,指针和长度,很明确就是将制定size的内存初始化为0。而memset有3个参数,需要记忆参数的位置,有不少人经常把长度和初始化值搞错。 bzero比memset的可读性要好。memset可以制定初始化的值,实际上绝大多数情况都是0。 一旦新版本g

  • 问题内容: 来自的javadoc : 返回此Calendar是否代表指定Object所表示的时间之前的时间。此方法等效于: 当且仅当when是Calendar实例。否则,该方法返回false。 如果有人传递的不是Calendar实例的东西返回false,为什么它接受一个Object?为什么不只接受Calendar实例呢?这使我在相当长一段时间内一直在监视功能的不正确结果。 问题答案: 我认为没有特

  • 问题内容: 我不确定为什么列出项目时为什么需要使用ul-li而不是简单地使用div。我可以使两者看起来完全一样,因此与创建div相比,创建无序列表的功能优势在哪里? 问题答案: 为了语义正确。HTML具有表达事物列表的功能,它可以帮助Google机器人,屏幕阅读器以及所有不仅仅关心网站外观的用户更好地了解您的内容。