在不创建新副本的情况下获取数组的一部分

San*_*ari 5 java arrays

我试图找到一种在不创建新副本的情况下切片超大型阵列的解决方案/解决方法。这是我的问题。

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

我想获得数千个大小为100的切片。如果我使用Arrays.copyOfRange()方法获取切片,则由于将每个切片都是消耗内存的新副本,因此无法实现将所有内容放入单个大数组的目的。

我有一些遗留代码(多年来,许多人写了超过一百万行),它们可以处理自己的数据(较小的数组)。不可能修改现有代码以在大型数组中使用索引(开头,结尾)。

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

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

我在Java中有哪些选择?

编辑:我看了以下类似的问题,但它不包含对我的问题的答复。 如何在Java中获取数组的子数组而不复制数据?

Jea*_*art 1

最好的选择是将切片的索引存储在单独的结构中,例如存储这些索引的数组。

这样,您就不会将大型数组实例化为整个数据数组的一部分。