java - 了解快速排序语法

标签 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);
}

最佳答案

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

请记住,Java 通过类型删除实现泛型——这意味着该方法的运行时类型签名是

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

(通过删除 <> 之间的所有内容)所以您的方法具有返回类型 void .

什么 <E>确实是说输入数组和比较器的类型是相关的:比较器需要能够比较 E 类型的“事物”。 , 但它实际上不必只处理 exact 类型的事情 E .

这就是<? super E>做:例如,你可以有一个 Comparator<CharSequence> , 然后用它来排序 String[] , 自 StringCharSequence 的子类.

关于java - 了解快速排序语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31637853/

相关文章:

java - 防止 Swing GUI 在调用既访问 Swing 组件又耗时的方法时无响应

java - 有什么方法可以将变量传递给 Java 中的验证约束消息?

Java语法问题

c++ - 如何将 "jni/*.c/cpp"文件添加到 CMakeLists.txt 文件?

sorting - 为什么插入排序 O(n^2) 在排序小数组 ~ 7 元素时更好。与 Quick Sort 和 Merge Sort 等 O(nlogn) 排序算法相比?

java - 用一个循环写一个快速排序

c - 为什么 C 快速排序函数(磁带比较、磁带交换)比冒泡排序函数慢得多?

java - 有没有办法使基于 Ehcache 文件的配置覆盖编程配置?

java - 来源和行为兼容性

syntax - gnuplot 如何给列号动态绘制?