ArrayMap简单了解

   

一,基本使用     

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,"测试");
//AndroidSDK,还提供了三个类似思想的集合:
SparseBooleanArray sparseBooleanArray = new SparseBooleanArray();
SparseIntArray sparseIntArray = new SparseIntArray();
SparseLongArray sparseLongArray = new SparseLongArray(); //要求版本api18以上
//他们和SparseArray唯一的区别在于value的类型,SparseArrayvalue可以是任意类型,.
//而它们三个是拆箱后的基本类型

猜你喜欢

转载自blog.csdn.net/qq_38859786/article/details/80405247