获取数组的一部分而不创建新副本

2024-03-19

我正在尝试找到一种解决方案/解决方法来切片非常大的数组而不创建新副本。这是我的问题。

假设我有一个大小为 1 亿或更多的 double/int 大型数组。我将代表不同事物的许多不同数组存储在一个非常大的数组中,以显着节省内存使用量。因此,我没有使用 100 万个每个大小为 100 的数组,而是使用一个大小为 100,000,000 的数组。我存储索引(开始和停止)来跟踪我的数据。

我想要获得数千个大小为 100 的切片。如果我使用 Arrays.copyOfRange() 方法来获取切片,则它违背了将所有内容放入一个大数组中的目的,因为每个切片都是一个占用内存的新副本。

我有遗留代码(多年来由许多人编写的超过 100 万行),它们使用自己的数据(较小的数组)。无法修改现有代码来处理大型数组中的索引(开始、结束)。

如果我能以某种方式返回原始数组,使得返回的数组是一个引用(或假装是),其中索引 0 是原始大数组中的某个任意索引,那就太好了。

在 C/C++ 中,我可以轻松返回一个具有特定偏移量和长度的指针,调用代码可以使用该指针。

我在 Java 中有哪些选择?

编辑:我查看了以下类似的问题,但它不包含对我的问题的答复。如何在Java中获取数组的子数组而不复制数据? https://stackoverflow.com/questions/3395547/how-to-get-a-sub-array-of-array-in-java-without-copying-data?rq=1


对于 int 值数组,您可以将其包装在IntBuffer http://docs.oracle.com/javase/7/docs/api/java/nio/IntBuffer.html。您还可以包装数组的一部分。

int[] largeArray = . . .

// create a slice containing the elements 100 through 149 (50 elements):
IntBuffer slice = IntBuffer.wrap(largeArray, 100, 50);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取数组的一部分而不创建新副本 的相关文章

随机推荐