我正在尝试寻找一种切片极大数组的解决方案/解决方法,而不创建新的副本。这是我的问题。
假设我有一个大小为1亿或更多的双精度/整数大数组。我在一个非常大的数组中存储表示不同事物的多个不同数组,以显著节省内存使用。因此,我有一个大小为1亿的单个数组,而不是每个大小为100的100万个数组。我存储索引(开始和停止)以跟踪我的数据。
我想要获取数千个大小为100的切片。如果我使用Arrays.copyOfRange()方法来获取切片,那么它会破坏将所有内容放入单个大数组的目的,因为每个切片都是新的副本,吃掉了内存。
我有一个遗留代码(多年来由许多人编写的超过100万行),用于处理自己的数据(这些数据是较小的数组)。修改现有代码以使用大数组中的索引(开始、结束)不可能。
如果我可以以某种方式返回原始数组,使得返回的数组是一个引用(或者假装是一个引用),其中索引0是原始大数组中的某个任意索引,那就太好了。
在C/C++中,我可以轻松地返回一个特定偏移量和长度的指针,调用代码可以使用它。
在Java中,我有哪些选择?
编辑:我查看了以下类似的问题,但它没有回答我的问题。 如何在Java中获取数组的子数组而不复制数据?
假设我有一个大小为1亿或更多的双精度/整数大数组。我在一个非常大的数组中存储表示不同事物的多个不同数组,以显著节省内存使用。因此,我有一个大小为1亿的单个数组,而不是每个大小为100的100万个数组。我存储索引(开始和停止)以跟踪我的数据。
我想要获取数千个大小为100的切片。如果我使用Arrays.copyOfRange()方法来获取切片,那么它会破坏将所有内容放入单个大数组的目的,因为每个切片都是新的副本,吃掉了内存。
我有一个遗留代码(多年来由许多人编写的超过100万行),用于处理自己的数据(这些数据是较小的数组)。修改现有代码以使用大数组中的索引(开始、结束)不可能。
如果我可以以某种方式返回原始数组,使得返回的数组是一个引用(或者假装是一个引用),其中索引0是原始大数组中的某个任意索引,那就太好了。
在C/C++中,我可以轻松地返回一个特定偏移量和长度的指针,调用代码可以使用它。
在Java中,我有哪些选择?
编辑:我查看了以下类似的问题,但它没有回答我的问题。 如何在Java中获取数组的子数组而不复制数据?
TreeSet
和TreeMap
,但我不确定它们是否适用于你的问题。 - Luiggi Mendoza