特性 | 描述 |
---|---|
类型 | Array (Java)Array (Kotlin) |
特点 | 固定长度、连续内存、支持随机访问 |
适用场景 | 已知数据量、频繁随机访问元素 |
示例 | int[] numbers = {1,2,3}; Array<String> names = arrayOf("A","B") |
类型 | Java/Android SDK 对应类 | 适用场景 |
---|---|---|
ArrayList | java.util.ArrayList | 动态数组,频繁增删元素 |
LinkedList | java.util.LinkedList | 频繁插入/删除首尾元素 |
HashSet | java.util.HashSet | 快速去重、无序存储 |
TreeMap | java.util.TreeMap | 有序键值对、范围查询 |
特性 | 描述 |
---|---|
类型 | android.util.SparseArray / android.util.SparseIntArray |
优势 | 节省内存(仅存储有效数据)、适合键为整数的场景 |
示例 | “`kotlin |
val sparse = SparseArray
sparse.put(1, “A”)
sparse.get(1) // 返回”A”
| 适用场景 | 替代`HashMap`存储整数键值对(如View ID映射) |
# 2. 双向链表(SkipList)
| 特性 | 描述 |
|---------------------|----------------------------------------------------------------------|
| 实现 | Android SDK 无直接实现,需自定义或使用第三方库(如Java的`ConcurrentSkipListMap`) |
| 用途 | 高性能并发容器、范围查询优化 |
| 示例 | 适用于自定义缓存系统或排序需求 |
三、数据结构选择策略
| 需求场景 | 推荐数据结构 | 原因 |
|---------------------|-----------------------------|-------------------------------------------|
| 高频随机访问 | 数组/ArrayList | O(1)时间复杂度访问 |
| 频繁增删元素 | LinkedList | O(1)增删(已知位置) |
| 快速查找键值 | HashMap/SparseArray | O(1)查找(哈希冲突时退化) |
| 内存敏感场景 | SparseArray | 避免`HashMap`的额外对象开销 |
| 有序数据管理 | TreeMap/PriorityQueue | 自动排序与优先级处理 |
四、代码对比示例
```kotlin
// ArrayList vs LinkedList 性能对比
val arrayList = ArrayList<Int>()
val linkedList = LinkedList<Int>()
// 尾部插入(ArrayList更优)
for (i in 0..999) {
arrayList.add(i) // O(1)
linkedList.add(i) // O(1)(尾部)
}
// 头部插入(LinkedList更优)
for (i in 0..999) {
arrayList.add(0, i) // O(n) 会导致性能问题
linkedList.addFirst(i) // O(1)
}
解答:
ArrayList
存储数据,因其支持O(1)随机访问,适配RecyclerView.Adapter
的getItem
方法 LinkedList
(随机访问为O(n)) DiffUtil
优化刷新效率解答:
String
、Int
等基础类型,需手动序列化复杂对象 Gson
/Moshi
将对象转为JSON字符串 List
时需转换为数组或拼接字符串(如",".join(list)
) // 存储List<Int> val list = listOf(1,2,3) val json = Gson().toJson(list) editor.putString("key", json) // 存入SharedPreferences