已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。
昨天关门了。
Improve this question
正如标题所说,有没有一种方法可以让我在Java中拥有一个稀疏的int数组?类似于int[]
或Integer[]
,但数组中的每个元素都不应该占用空间,直到它实际上被写入了一个非零值。这是因为我想尽可能优化内存(因为数组中的大多数元素都是0/空),但可以选择按索引查找,就像标准数组一样。在问这个问题之前,我考虑了以下选项:
- 我知道像https://developer.android.com/reference/android/util/SparseIntArray这样的选项,问题是它们似乎是Android专用的,我找不到桌面版的。
- 我的理解是
int[]
和Integer[]
不是稀疏数组;即使我将Integer
数组的元素保留为null
,它仍然会占用空间,这对我来说是行不通的。 - 另一种选择是使用散列表,虽然这样做有效,但它占用的空间量并不小(这在本例中是一个问题)。
- 像链表或数组列表(例如
Pairs
)这样的选项将不起作用,因为这样很难进行查找。
1条答案
按热度按时间qv7cva1a1#
您的集合有多大?请注意
Integer
(装箱引用类型)会增加大量内存开销。标准Java集合类型(Map
,List
)只支持引用类型。int
占用4字节内存,long
占用8字节内存。请与Integer
(16字节)或Long
(24字节)进行比较。参考:What is the storage cost for a boxed primitive in Java?GNU Trove使用基元类型实现大多数集合,这增加了缓存局部性并减少了内存消耗。