有人告诉我,使用临时对象并不是交换数组中元素的最有效方法。
如:
Object[] objects = new Object[10];
// -- Assign the 10 objects some values
var Temp = objects[2];
objects[2] = objects[4];
objects[4] = Temp;
是否真的可以在不使用其他对象的情况下交换数组元素?
我知道你可以使用数学单元,但我无法弄清楚如何使用任何其他对象类型完成。
答案 0 :(得分:6)
使用临时交换对象是最正确的方法。这应该比你的优先级更高,而不是速度。编写快速输出垃圾的软件非常容易。
在处理对象时,你不能以不同的方式做到这一点。这根本不是低效的。指向已存在对象的额外引用变量几乎不会成为问题。
但即使使用数值,大多数聪明的技术都无法在某些时候产生正确的结果。
答案 1 :(得分:2)
可能是可能告诉你这个人正在考虑这样的事情:
objects[2] = Interlocked.Exchange(ref objects[4], objects[2]);
当然,仅仅因为这是一行并不意味着它不是也使用临时变量。它只是以方法参数的形式隐藏(对objects[2]
的引用被复制并传递给Exchange
方法),使其不太明显。
答案 2 :(得分:1)
你可以用Interlocked.Exchange做到这一点,但这不会比使用临时变量更快......并不是说速度可能对于面试之外的这种问题很重要。
答案 3 :(得分:0)
我在网上找到的每个例子都使用这种方法来交换数组中的2个元素。事实上,如果这是我经常做的事情,我肯定会考虑一种通用的扩展方法,类似于这个例子:
答案 4 :(得分:0)
你应该担心创建一个临时对象的唯一时间是它的大量,并且复制对象所花费的时间将足够长,如果你做了很多,例如,或者如果你正在进行排序10k项目,并将它从9999移动到1,1阶段,一次测试它是否应该移动,然后每次交换它将是一个消耗。但是,更有效的方法是测试所有测试并移动一次。