当前位置: 首页 > 知识库问答 >
问题:

SparseArray vs HashMap

卢朝
2023-03-14
    null

然而,每当我试图在Android项目中使用带有整数键的HashMap时,IntelliJ告诉我应该使用SparSearRay。我觉得这真的很难理解。有人知道使用sparsearrays有什么令人信服的理由吗?

共有1个答案

张浩阔
2023-03-14

当键为基元类型时,SparSearRay可用于替换HashMap。对于不同的键/值类型,有一些变体,尽管并不是所有的变体都是公开的。

好处是:

  • 免分配
  • 禁止拳击
    null
SparseArray          <Integer, Object>
SparseBooleanArray   <Integer, Boolean>
SparseIntArray       <Integer, Integer>
SparseLongArray      <Integer, Long>
LongSparseArray      <Long, Object>
LongSparseLongArray  <Long, Long>   //this is not a public class                                 
                                    //but can be copied from  Android source code 
class SparseIntArray {
    int[] keys;
    int[] values;
    int size;
}

类=12+3*4=24字节
数组=20+1000*4=4024字节
总计=8,072字节

HashMap:

class HashMap<K, V> {
    Entry<K, V>[] table;
    Entry<K, V> forNull;
    int size;
    int modCount;
    int threshold;
    Set<K> keys
    Set<Entry<K, V>> entries;
    Collection<V> values;
}

类=12+8*4=48字节
条目=32+16+16=64字节
数组=20+1000*64=64024字节
总计=64,136字节

java.lang.instrument包包含一些有用的高级操作方法,比如使用GetObjectSize(objectToSize)检查对象的大小。

更多信息可从官方的Oracle文档中获得。

类=12字节+(n个实例变量)*4字节
数组=20字节+(n个元素)*(元素大小)
条目=32字节+(第一个元素大小)+(第二个元素大小)

 类似资料:

相关问答

相关文章

相关阅读