Arrays 当我对数组B进行排序时,数组A的内容会发生变化,数组B应该是A的副本
我有一个10倍的循环来对一个数字数组进行排序B复制原始数组a并记录运行时,因为数组在循环结束时被排序,所以我创建了一个要更改的重复数组B,并使用a将其设置为新循环开始时的原始状态 当它对B排序时,A也会自动排序,即使我只发送B。 为什么会发生这种情况以及如何改变它 循环: 排序: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
发生这种情况是因为您使用相同的数组。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] }