上一篇
安卓开发中常用的数据结构
- 行业动态
- 2025-04-23
- 2
安卓开发常用数据结构:数组、列表、Map、Set、栈、队列及
安卓开发中常用的数据结构
集合类(Collections)
ArrayList
- 类型: 动态数组
- 特点: 支持随机访问,插入/删除元素时需要移动后续元素,适合频繁读取的场景。
- 适用场景: 列表数据展示(如
RecyclerView
的适配器数据源)。
LinkedList
- 类型: 链表
- 特点: 插入/删除效率高,但随机访问效率低。
- 适用场景: 频繁增删元素的场景(如任务队列)。
HashSet
- 类型: 无序集合
- 特点: 基于哈希表实现,元素唯一,查找/插入时间复杂度为O(1)。
- 适用场景: 去重操作(如过滤重复数据)。
TreeSet
- 类型: 有序集合
- 特点: 基于红黑树实现,元素自动排序。
- 适用场景: 需要排序的去重数据(如按时间排序的事件列表)。
映射类(Maps)
HashMap
- 类型: 键值对存储
- 特点: 键可以是任意对象,值通过键快速查找(O(1))。
- 适用场景: 数据缓存、配置项存储。
SparseArray
- 类型: 键为
int
的优化映射 - 特点: 比
HashMap
更省内存(无装箱开销),键必须是int
。 - 适用场景: Android资源ID映射(如
R.layout.xxx
)。
- 类型: 键为
Bundle
- 类型: 轻量级键值对容器
- 特点: 专用于
Activity
/Fragment
间传递数据,支持基本类型和Parcelable
。 - 适用场景: 传递少量数据(如
Intent
附加参数)。
队列与栈
ArrayDeque
- 类型: 双端队列
- 特点: 支持头部和尾部的快速插入/删除,线程不安全。
- 适用场景: LRU缓存实现、任务调度。
Stack
- 类型: 后进先出(LIFO)栈
- 特点: 基于
Vector
实现,性能较低,建议用Deque
替代。 - 适用场景: 表达式求值、回退操作。
Android特有数据结构
数据结构 | 用途 | 特点 |
---|---|---|
SparseBooleanArray | 存储int 键和boolean 值 | 节省内存,避免装箱 |
SparseIntArray | 存储int 键和int 值 | 专为int 设计,性能优于HashMap |
Parcelable | 对象序列化 | 比Serializable 更高效,用于Intent |
AsyncTask | 异步任务管理 | 简化多线程操作(已弃用,推荐Executor ) |
相关问题与解答
问题1: 为什么SparseArray
比HashMap
更适合存储int
键?
解答:SparseArray
内部直接使用两个int
数组(键和值),避免了HashMap
的装箱(Integer
)和哈希冲突处理,因此更轻量且性能更高,存储1万条int
键值对时,SparseArray
比HashMap
节省约20%内存。
问题2: 在安卓开发中,如何选择ArrayList
和LinkedList
?
解答:
- 若需要频繁随机访问元素(如列表滚动),优先用
ArrayList
(O(1)时间复杂度)。 - 若需要频繁插入/删除元素(如任务队列),优先用
LinkedList
(O(1)时间复杂度)。 - 注意:
ArrayList
的扩容成本较高,初始化时可指定合理容量