一,基本使用
Map<String,String> arrayMap = new ArrayMap(); //要求版本19以上 arrayMap.put("1",null); arrayMap.put(null,"2"); arrayMap.put(null,"3");
二,概念介绍
public final class ArrayMap<K, V> implements Map<K, V> {
1,ArrayMap是一个关联数组,哈希表,线程不安全,效率高.运行null键null值.
2,效率相对比HashMap高,内部基于两个数组,一个int[],用于保存每个item的hashcode,一个object[]数组,用于保存key/value键值对.容量上市上一个数组的2倍.
3,但不适合打容量的数据存储,存储大数据时,性能将退化至少50%.
4,它可以避免在将数据插入Map集合中额外的空间消耗,并且它扩容更合适,扩容时,只需要拷贝数组,不需要重建哈希表.
5,扩容规则:如果容量大于8,则扩容一半,(类似于ArrayList)
6,如果出现了hash冲突,则需要从目标点向两头遍历,找到正确的index.
总结:适用于存储数据量不大的时候
三,ApareseArray
它和ArrayMap基本相似,但ApareseArray只允许null值,并且在性能上做了优化.比如在删除操作上:
当删除一个元素时,并不是立即从value数组中删除,并压缩数组;而是将其在value数组中标记为已删除.这样当储存相同的key为value时,可以重用空间.如果该空间没有被重用随后将在合适的时机里执行gc(垃圾回收)操作,将数组压缩,以免浪费空间.
SparseArray<String> sparseArray = new SparseArray<>(); sparseArray.put(1,null); sparseArray.put(2,"测试");
//Android的SDK中,还提供了三个类似思想的集合: SparseBooleanArray sparseBooleanArray = new SparseBooleanArray(); SparseIntArray sparseIntArray = new SparseIntArray(); SparseLongArray sparseLongArray = new SparseLongArray(); //要求版本api18以上 //他们和SparseArray唯一的区别在于value的类型,SparseArray的value可以是任意类型,. //而它们三个是拆箱后的基本类型