Arrays 当我对数组B进行排序时,数组A的内容会发生变化,数组B应该是A的副本

Arrays 当我对数组B进行排序时,数组A的内容会发生变化,数组B应该是A的副本,arrays,sorting,kotlin,insertion-sort,Arrays,Sorting,Kotlin,Insertion Sort,我有一个10倍的循环来对一个数字数组进行排序B复制原始数组a并记录运行时,因为数组在循环结束时被排序,所以我创建了一个要更改的重复数组B,并使用a将其设置为新循环开始时的原始状态 当它对B排序时,A也会自动排序,即使我只发送B。 为什么会发生这种情况以及如何改变它 循环: 排序: 发生这种情况是因为您使用相同的数组。val B=A B引用数组A后,未创建副本。要创建副本,需要在循环开始时调用val B=a.copyOf.,您有一个IntArray对象和一个引用它的变量: A ──→ In

我有一个10倍的循环来对一个数字数组进行排序B复制原始数组a并记录运行时,因为数组在循环结束时被排序,所以我创建了一个要更改的重复数组B,并使用a将其设置为新循环开始时的原始状态

当它对B排序时,A也会自动排序,即使我只发送B。 为什么会发生这种情况以及如何改变它

循环:

排序:


发生这种情况是因为您使用相同的数组。val B=A B引用数组A后,未创建副本。要创建副本,需要在循环开始时调用val B=a.copyOf.

,您有一个IntArray对象和一个引用它的变量:

    A ──→ IntArray
然后创建第二个变量,该变量引用同一IntArray对象

希望这说明了为什么通过引用B所做的更改也可以通过引用A看到

如果您希望B引用不同的IntArray,则必须制作一份副本,例如:

val B = A.copyOf()
或:

或:

或者其他各种方式。复制通常是最好的


最后,请注意,Kotlin约定用于变量、方法和属性,以小写字母开头,仅类和类型参数以大写字母开头。

B原始数组a的副本-不,不是。谢谢,它工作得很好,现在我发现我还有另一个问题。时间总是给我零分milliseconds@PedroParreira,令人惊讶的是,很难知道代码运行需要多长时间。见例。
    A ──→ IntArray
    A
      >─→ IntArray
    B 
val B = A.copyOf()
val B = A.clone()
val B = IntArray(a.size){ A[it] }