美文网首页
Android - 性能优化之数据结构

Android - 性能优化之数据结构

作者: BlueSocks | 来源:发表于2022-06-21 21:39 被阅读0次

    什么是性能优化

    一款app除了要有令人惊叹的功能和令人发指交互之外,在性能上也应该追求丝滑的享受,这样才能提供用户体验

    优化目的 性能指标 优化方法
    更快 流畅性 启动速度,页面显示速度(显示和切换),响应速度
    更稳定 稳定性 避免出现应用崩溃(Crash),避免出现应用无响应(ANR)
    更省 资源节省性 内存大小,安装包大小,耗电量,网络流量

    线性数据结构

    • 数组

      一片连续的存储空间. eg:int[i]

    • 顺序表 (ArrayList)

      • 物理上连续
      • 逻辑上连续
      • 大小可以动态增加
    • 链表(LinkedList)

      • 物理上不连续

      • 逻辑上连续

      • 可以动态增加和删除节点

    顺序表 链表
    优点 物理上连续,所以寻找快 空间不连续,逻辑上连续,删除,增加元素快
    缺点 删除和增加元素要大量移动数据,损耗性能 物理上不连续,查找要轮训,查找慢

    Hash 表

    结合了数组和链表的优点,增删改查都很快。

    HashMap
    hashMap的特点
    • Collection 是集合,有数组(ArrayList)查找快增删慢,有链表(LinkList)增删快查找慢,Map 就是数组与链表的结合体,结合了两的优点。

    • HashMap 的数据关系是 key 到 value 的映射关系,key 是唯一的,value是可以重复的。

    • HashMap 的 Hash , 是因为 key 是需要计算哈希值,这种数组就是散列表。

    • HashMap 可以理解为 key计算后的位置用 数组 保存,数组里面的内容放着 链表,链表的节点是 key-value 一个个保存起来,查找的时候,快速找到数组中对应的位置,然后遍历链表。

    • HashMap 非线程安全,可以用 HashTable。

    • HashMap 数据是无序的,需要有序的使用 LinkedHashMap。

    操作 原理
    增加 先计算Key的hash值(装箱拆箱),根据hash值找到数组位置,再往链表中添加元素
    查找 先计算Key的hash值(装箱拆箱),根据hash值找到数组位置,再遍历链表
    删除 先计算Key的hash值(装箱拆箱),根据hash值找到数组位置,再从链表中删除节点

    SparseArray

    操作 原理
    增加 根据Key值进行二分查找,找到可以添加元素的位置,然后插入数据,并移动其他数据
    查找 根据Key值进行二分查找,找到数组下标,然后取出对应value值
    删除 根据Key值进行二分查找,找到数组下标,然后将mValues数组的对应下标处的值置为DELETED

    HashMap 和 SparseArray性能对比

    相关文章

      网友评论

          本文标题:Android - 性能优化之数据结构

          本文链接:https://www.haomeiwen.com/subject/maoevrtx.html