因此,对于我的研究小组,我正在尝试将一些旧的 C++ 代码转换为 Java,但遇到了一个问题,在 C++ 代码中它执行以下操作:
method(array+i, other parameters)
现在我知道 Java 不支持指针运算,所以我通过将子数组从 array+i 复制到数组末尾到一个新数组中来解决这个问题,但这会导致代码运行得非常慢(即慢 100 倍比 C++ 版本)。有办法解决这个问题吗?我看到有人在这里提到了一种内置方法,但是这样会更快吗?
最佳答案
不仅你的代码变慢了,它还改变了正在发生的事情的语义:当你在 C++ 中进行调用时,没有完成数组复制,所以 method
的任何更改都可能适用于数组发生在原始副本中,而不是一次性副本中。
要在 Java 中实现相同的效果,请按如下方式更改函数的签名:
void method(array, offset, other parameters)
现在调用者必须传递数组中的位置,方法
应该考虑数组的“虚拟零”。换句话说,而不是像这样写
for (int i = 0 ; i != N ; i++)
...
你必须写
for (int i = offset ; i != offset+N ; i++)
...
这将保留将数组传递给成员函数的 C++ 语义。
关于java - 优化 Java 数组复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127128/