优化Java阵列复制

Lan*_*ait 1 java arrays

因此,对于我的研究小组,我试图将一些旧的C++代码转换为Java,并且遇到了一个问题,在C++代码中它执行以下操作:

    method(array+i, other parameters)
Run Code Online (Sandbox Code Playgroud)

现在我知道Java不支持指针算法,所以我通过将数组+ i中的子数组复制到数组的末尾到新数组来解决这个问题,但这会导致代码运行速度非常慢(比C++慢100倍)版).有办法解决这个问题吗?我看到有人在这里提到内置方法,但是更快吗?

das*_*ght 6

你的代码不仅变得更慢,而且还改变了正在发生的事情的语义:当你用C++进行调用时,没有完成数组复制,所以任何method可能适用于数组的更改都发生在原始代码中,而不是在丢弃副本.

要在Java中实现相同的效果,请更改函数的签名,如下所示:

void method(array, offset, other parameters)
Run Code Online (Sandbox Code Playgroud)

现在调用者必须传递数组中method应该考虑数组的"虚拟零"的位置.换句话说,而不是写像

for (int i = 0 ; i != N ; i++)
    ...
Run Code Online (Sandbox Code Playgroud)

你必须写

for (int i = offset ; i != offset+N ; i++)
    ...
Run Code Online (Sandbox Code Playgroud)

这将保留将数组传递给成员函数的C++语义.