gpt4 book ai didi

Java - 为什么 DualPivotQuicksort 有重复的代码?

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:10:00 26 4
gpt4 key购买 nike

查看 Dual pivot quick sort 的 jdk implementatino,每种类型的数组都有大量重复代码。例如:

整数:

 static void sort(int[] a, int left, int right,
int[] work, int workBase, int workLen) {
// Use Quicksort on small arrays
if (right - left < QUICKSORT_THRESHOLD) {
sort(a, left, right, true);
return;
}

多头:

 static void sort(long[] a, int left, int right,
long[] work, int workBase, int workLen) {
// Use Quicksort on small arrays
if (right - left < QUICKSORT_THRESHOLD) {
sort(a, left, right, true);
return;
}

为什么不直接使用 T[] a 并从自动装箱中获益?

最佳答案

这样做是出于性能原因。通用 T[] 不能用于代替原始 intlong 的数组,因此没有 int 的重载[]long[] 用户将被迫使用使用盒装 LongInteger 的泛型。

您也无法从此处的自动装箱中受益,因为自动装箱是为单个基元定义的,而不是为基元数组定义的。

private static <T> void doSomething(T[] array){
...
}
public static void main (String[] args) throws java.lang.Exception {
doSomething(new String[10]); // Compiles fine
doSomething(new int[10]); // Compile-time error
}

Main.java:...: error: method doSomething in class ... cannot be applied to given types;

  doSomething(new int[10]);
^
required: T[]
found: int[]

reason: inference variable T has incompatible bounds equality constraints: int upper bounds: Object where T is a type-variable: T extends Object declared in method doSomething(T[])

即使可以,处理速度也会慢很多,并且需要大量额外的内存,因为包装大型基元数组的成本可能很高。

关于Java - 为什么 DualPivotQuicksort 有重复的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32258255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com