gpt4 book ai didi

java - 为什么 Sun 的 Arrays.sort 实现创建输入数组的克隆?

转载 作者:搜寻专家 更新时间:2023-11-01 02:54:35 25 4
gpt4 key购买 nike

有人可以解释一下下面的代码吗?

来源:Arrays.class,

public static <T> void sort(T[] a, Comparator<? super T> c) {
T[] aux = (T[])a.clone();
if (c==null)
mergeSort(aux, a, 0, a.length, 0);
else
mergeSort(aux, a, 0, a.length, 0, c);
}
  1. 为什么要创建 aux?
  2. 如果代码对 aux 进行排序,排序如何工作?
  3. 排序前克隆数组不是浪费资源吗?

最佳答案

1: Why create aux?

因为 mergeSort 方法需要源数组和目标数组。

2: How is the sort ever working if the code sorts aux?

因为 mergeSort 方法排序 aux a

3: Isn't this a waste of resources to clone the array before sorting?

不,它不是......使用 mergeSort 的实现。现在,如果 sort 返回一个排序的数组,那么进行克隆(而不是创建一个空数组)将是一种浪费。但是 API 要求它进行就地排序,这意味着 a 必须是“目的地”。所以元素需要复制到一个临时数组,这将是“源”。

如果您看一下 mergeSort 方法,您会发现它以递归方式对要排序的数组进行分区,在其源数组和目标数组之间来回合并。为此,您需要两个数组。据推测,Sun/Oracle 已经确定该算法为典型的 Java 排序用例提供了良好的性能。

关于java - 为什么 Sun 的 Arrays.sort 实现创建输入数组的克隆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4190379/

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