首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ArrayMapHashMap区别

final V value;   3 final int hash;   4 HashMapEntry next;   从中我们得知Entry存储的内容有key、value、hash值、next...所以我们在一些情况下可以使用SparseArrayArrayMap来代替HashMap。...二:ArrayMap ArrayMap是一个映射的数据结构,它设计上更多的是考虑内存的优化,内部是使用两个数组进行数据存储,一个数组记录key的hash值,另外一个数组记录Value...值,它SparseArray一样,也会对key使用二分法进行从小到大排序,在添加、删除、查找数据的时候都是先使用二分查找法得到相应的index,然后通过index来进行添加、查找、删除等操作,所以,应用场景...K keyAt(int index) public V valueAt(int index) ArrayMap应用场景 1.数据量不大,最好在千级以内 2.数据结构类型为Map类型

1.9K40

SparseArrayArrayMap

SparseArray SparseArray中Key为int类型(避免了装箱拆箱),Value是Object类型,KeyValue分别存放在一个数组内,Key数组int值是按顺序排列的,查找的时候采用的是二分查找...ArrayMap ArrayMap的KeyValue同HashMap一样都可以存放多种类型,ArrayMap对象的数据存储格式如下: 1.mHashes是一个记录所有key的hashcode值组成的数组...中有两个非常重要的静态成员变量mBaseCachemTwiceBaseCacheSize,用于ArrayMap所在进程的全局缓存功能: mBaseCache:用于缓存大小为4的ArrayMap,mBaseCacheSize...很多场景可能起初都是数据很少,为了减少频繁地创建和回收Map对象,ArrayMap采用了两个大小为10的缓存队列来分别保存大小为48的Map对象。为了节省内存有更加保守的内存扩张以及内存收缩策略。...ArrayMap也是非线程安全的类

55510
您找到你想要的搜索结果了吗?
是的
没有找到

初识 ArrayMap

HashCode 的 mHashes 用来存储 key-value 的 Object 数组类型的 mArray; ArrayMap 是非线程安全的; ?...HashCode 冲突),则从当前对应的 index 向后向前分别遍历查找;注意:采用二分查找,则说明 mHashes 数组是有序的; 元素添加 ArrayMap 添加元素的方式主要有 put ...为了避免频繁的创建和销毁,提供了 mBaseCache mTwiceBaseCache 两个数组缓冲池,同时提供了 allocArrays freeArrays 内存分配释放的方法,两者相互对应...内部采用了二分查找方式查询,时间复杂度 O(logN),每次添加删除元素都需要移动其后面的元素,速度相对较慢;而 HashMap 查找删除时间复杂度为 O(1); ArrayMap 相对于 HashMap...增加了内存缓存策略,避免频繁创建对象而分配内存与 GC 操作,同时限制了缓冲池的上限(10 个);与此同时,ArrayMap 还提供了灵活的扩容缩容机制,这两种机制比 HashMap 更灵活且节省时间

93530

深度解读ArrayMap优势与缺陷

HashMap的查找插入时间复杂度为O(1)的代价是牺牲大量的内存来实现的,而SparseArrayArrayMap性能略逊于HashMap,但更节省内存。 接下来,从源码看看ArrayMap。...2)ArrayMap类有两个非常重要的静态成员变量mBaseCachemTwiceBaseCacheSize,用于ArrayMap所在进程的全局缓存功能: mBaseCache:用于缓存大小为4的ArrayMap...2.2 缓存机制 ArrayMap是专为Android优化而设计的Map对象,使用场景比较高频,很多场景可能起初都是数据很少,为了减少频繁地创建和回收,特意设计了两个缓存池,分别缓存大小为48的ArrayMap...步骤2:通过创建新的ArrayMap从该缓存环中的map2map3,这两条缓存,实例如下代码。...适合频繁删除插入来回执行的场景,性能比较好 缓存机制 ArrayMap针对容量为48的对象进行缓存,可避免频繁创建对象而分配内存与GC操作,这两个缓存池大小的上限为10个,防止缓存池无限增大; HashMap

1.8K20

Weekly 之 集合 专栏

这周的 weekly 是分享集合相关的知识,集合所涉及到的知识点就是数据结构、线程安全性能相关。...: 数据结构 ArrayMap SparseArray 采用的都是两个数组,Android专门针对内存优化而设计的 HashMap 采用的是数据+链表+红黑树 内存优化 ArrayMap 比 HashMap...更节省内存,综合性能方面在数据量不大的情况下,推荐使用 ArrayMap; Hash 需要创建一个额外对象来保存每一个放入 map 的 entry,且容量的利用率比 ArrayMap 低,整体更消耗内存...O(1); SparseArray 适合频繁删除插入来回执行的场景,性能比较好 缓存机制 ArrayMap 针对容量为 4 8 的对象进行缓存,可避免频繁创建对象而分配内存与 GC 操作,这两个缓存池大小的上限为...这一点的处理比 ArrayMap 更有全面。

49030

Android开发之那些好用的数据结构与API

由于Android Application 主要是Java语言开发的,所以在写程序的时候,很多朋友们都会用到Java里面常用的数据结构,但是Android中提供了更加适合这个平台、好用的数据结构API...SparseArray比HashMap更省内存,它对数据采取了压缩的方式来表示稀疏数组的数据,从而节约内存空间,SparseArray只能存储key为int类型的数据,同时,SparseArray在存储读取数据时候... SimpleArrayMap —— 替代HashMap 其中,ArrayMap 是 Map的子类,而SimpleArrayMap 不是。...//创建一个ArrayMap keyvalue都是String类型 可以是任意类型 ArrayMap arrayMap = new ArrayMap(); //存...arrayMap.put("username", "zhangsan"); arrayMap.put("password", "123456"); //取 arrayMap.get(

80550

如何在clickhouse中实现连续的时间,比如连续的天

下面我们这里分享一下在clickhouse中如何实现连续的时间:连续的天 我们在clickhouse中实现连续的时间首先要学习一下range,arrayMap,arrayJoin这三个函数的使用。...的值得输出: 执行命令:select range(5,10,2) 输出结果: ┌─range(5, 10, 2)─┐ │ [5,7,9] │ └─────────────────┘ arrayMap...语法: arrayMap(func, arr1, …) func:函数的执行方式,一般表示arr1里面值按照什么标准执行 arr1:数组 案例:求第一个数组的2倍,第二个数组的5倍 执行命令:select...arrayMap((x,y)->(x*2,y*5),[1,34],[8,5]) 输出结果: ┌─arrayMap(lambda(tuple(x, y), tuple(multiply(x, 2), multiply...下面我们看下结果: 执行命令: select arrayJoin(arrayMap(x -> toDate(x), range(toUInt32(toDate('2021-01-01')),toUInt32

1.8K50

源码分析多进程下的SharedPreferences

getSharedPreferencesCacheLocked() { //以包名为key进行缓存ArrayMap,存在则直接...EditorImpl内部有一个mModified的Map成员变量,我们所有的修改在调用了commit或者apply方法后才会执行保存,可以看到,不管调用哪个方法都会调用commitToMemory()enqueueDiskWrite...QueuedWork.singleThreadExecutor().execute(writeToDiskRunnable); } 源码比较简单,其中最主要的就是区分了apply方法调用commit...中获取对应的File(无的话则创建ArrayMap或在ArrayMap中添加该键值对),然后调用重载方法getSharePreferences(File file,int mode)传入file,该方法中将通过包名从缓存中获取...(写入的时候会写入内存磁盘,而获取的时候则从内存中读取,除非重新创建或Android版本小于3.0并且mode为MODE_NULTI_PROCESS,因此造成多进程情况下修改数据后另一进程获取不到改变

36710

Android - 看似内存泄漏,实则不是,记一次内存泄漏的案例分析

APP中常常会存在内存泄漏的问题,一个简单的测试方法是,多次进入退出同一页面(Activity),使用adb shell中的dumpsys meminfo com.android.settings...如果随着多次进入退出,Activity的数量一致在增长,没有下降,那么便很大有可能是内存泄漏的问题。...关键点:通过MAT工具代码分析,未回收的对象被system_process进程引用,显示调用system_process GC即可解决问题,不属于内存泄漏。...如果不再页面退出时,及时从ArrayMap中delete掉此binder对象,就会有内存泄漏的问题。...但是我们在onPause中发现,其实已经调用了removeStatusChangeListener,其内部就会调用unregister方法,从ArrayMap中delete掉正确的binder对象。

1.2K100

Android中传值Intent与Bundle的区别小结

正巧小伙伴问Android传值IntentBundle区别,特此总结下: Intent与Bundle在传值上的区别 首先从使用上: Intent方式: 假设需要将数据从页面A传递到B,然后再传递到C...Bundle内部是由ArrayMap实现的,ArrayMap的内部实现是两个数组,一个int数组是存储对象数据对应下标,一个对象数组保存keyvalue,内部使用二分法对key进行排序,所以在添加、删除...而HashMap内部则是数组+链表结构,所以在数据量较少的时候,HashMap的Entry Array比ArrayMap占用更多的内存。...因为使用Bundle的场景大多数为小数据量,我没见过在两个Activity之间传递10个以上数据的场景,所以相比之下,在这种情况下使用ArrayMap保存数据,在操作速度内存占用上都具有优势,因此使用...Bundle来传递数据,可以保证更快的速度更少的内存占用。

1.5K20
领券