前言
Linus Benedict Torvalds : RTFSC – Read The Funning Source Code
概述
SparseArrays map integers to Objects. Unlike a normal array of Objects, there can be gaps in the indices. It is intended to be more memory efficient than using a HashMap to map Integers to Objects, both because it avoids auto-boxing keys and its data structure doesn’t rely on an extra entry object for each mapping.
翻译:SparseArrays 将 integers 映射到 Objects。与正常的数组不同,它允许在数组中有间隙。它的目的是比一般使用 HashMap 对内存的使用更加优化。因为它每个键值对避免了自动拆包键值和它的数据结构不依赖额外的条目封装。
SparseArray的数据结构使用的是稀疏数组(Sparse * array),所谓稀疏数组就是数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用。因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,于是可以采用一种压缩的方式来表示稀疏数组的内容。
使用
|
|
初始化
|
|
增加数据
|
|
修改数据
|
|
查找数据
|
|
通过位置,查找键的值
|
|
通过位置,查找值
|
|
特性
优点
- 在存储量不大的情况下,SparseArray 在可以用来替换 HashMap
>。在此情况下,SparseArray的内存消耗始终小于HashMap。
缺点
- 有一定的性能上的消耗的,并不适合当成包含大量元素的容器。
- 不是线程安全的。
- 插入数据按 key 大小顺序插入,使用对 key 进行二分查找。查找效率上不如 HashMap。
- 对删除做了一个优化,不会直接立即删除一个元素,而是把该位置的值设置成 DELETED,尝试 reuse。
延伸
前提都是在结构体量不是特别大的情况下
|
|