java - 优化 Java 数组复制

标签 java arrays

因此,对于我的研究小组,我正在尝试将一些旧的 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/

相关文章:

java - 基于安全策略创建java沙箱

java - 对数组进行降序排序,并将主数组的变化收集到新数组中

javascript - 如何在没有 Object.keys() 的情况下遍历对象数组?

java - Spring Cloud Stream - 应用程序初始化后发送消息

java - 使用 Java Config 配置 Spring Data JPA 自定义存储库 impl

java - Jsoup.parse(String) 和 document.toString() 和 document.html() 不一样

java - 如何将 java 类与已经运行的守护进程连接

comparison - 测试 Postgresql 数组字段是空还是空的正确方法是什么

c - 为什么 2[a] 在 C 中只声明 int a[3] 就可以通过编译

PHP Docblocks - 解释数组