java自动封装
在基本类型中java编程语言中一大功能叫做自动封装。但是这也避免了他们被提供的泛型集合使用, java语言提供了这些基本类型的对象版本
boolean 2Bytes = 封装类Boolean 8bbit
int 4Bytes = 封装类 Integer 32bits
flot 4Bytes = 封装类 Float 32bits
long 8Bytes = 封装类 Loog 64bits
提供基本类型与封装类型相同的功能,但是封装类型可以使用泛型集合.
封装类型就是替你将基本类型转化为它们的副本,这样你就不用担心你代码中的这些转化了
这个功能的免提的特性也解决了泛型中使用,但它会有一些性能处罚,这个循环中整数对象遍历的每一步, 运行环境都必须创建一个新的整数对象并在它加回到其它整数对象里面之前,创建一个新整数的对象。这就意味着,每当你进行自动封装转化时,都会产生一个新的对象配置。
测试显示基本类型只有4个字节,封装整数对象有16个字节
这里解释下 1 bytes = 8bits 。int类型4 bytes = 32bits
封装类型 16 bytes = 128bits
HashMap(哈希函数) 类似的通用容器。当你使用基本类型是,比如整数型,浮点型和布尔型 NO 。HashMap必须使用对象版本。
所以HashMap无法使用简单的32bits整数型,这当然会消耗掉更多的内存。
在这里你要小心,因为任何时间,当你通过容器中获取一个基本类型时,哪里也会发生自动装箱。
为了节省空间,android运行环境,提供了专为hashMap的功能提供的全套的通用容器家族,但却可以使用基本类型并避免自动封装。SparseArray
SparseArray(稀疏数组)SparseArray基本上类似于一个ArrayMaps,它们都是通过使用两种紧密包装的数组,而不是一个大的一个哈希散列,从而减少了整体的内存覆盖区。但是也产生了获取的对象的花费,所以它们只有在容器中有数百个对象时才更有用,而不是成千或者上百万。
SparseArray和ArrayMaps的最主要区别是对于SparseArray可以使用基本类型,减少内存,避免了自动封装。
使用SparseArray 需要注意 你有少量的数据,数百条以内,很多的访问。