了解QuickSort语法

时间:2015-07-26 14:04:39

标签: java syntax quicksort bounding

我对这种语法感到困惑,因为最初看起来好像函数应该返回<E>,但后来我看到了void<E>之前void的目的是什么?

另外,我对边界和泛型很熟悉,但我从来没有真正看到过这种方式。这种语法意味着什么Comparator<? super E>

以下是一个示例函数:

private <E> void sort(E[] array, Comparator<? super E>  cmp) {
   qsort(array, 0, array.length - 1, cmp);
}

3 个答案:

答案 0 :(得分:3)

第一个<E>不是类型 - 它是类型约束。

请记住Java通过类型擦除实现泛型 - 这意味着此方法的运行时类型签名是

private void sort(Object[] array, Comparator cmp)

(删除<>之间的所有内容),以便您的方法返回类型为void

<E>的作用是说输入数组和比较器的类型是相关的:比较器需要能够比较事物&#39; E类型,但它实际上不必仅处理完全类型E的内容。

这是<? super E>的作用:例如,您可以拥有Comparator<CharSequence>,然后使用它来排序String[],因为StringCharSequence的子类1}}。

答案 1 :(得分:3)

  

首先看起来好像该函数应该返回<E>但是我看到void

<E>部分有一种语法,用于为通用方法提供类型参数。实际的返回类型是void

  

这种语法意味着什么Comparator<? super E>

这意味着比较器可能用于E或其任何超类。

答案 2 :(得分:2)

Comparator<? super E>  

?是通配符,其下限是E.

例如:

private <E> void sort(E[] array, Comparator<? super E>  cmp)

如果你要传递

qsort(array, 0, array.length - 1, cmp);

如果数组是Number [] ,那么“?”的下限设置为java.lang.Number,即“?”可以是任何超级数字的东西。