Android性能优化—数据结构优化
为什么要学习数据结构?
有个人上少林寺拜师学艺。大师指点说武功重在内力,应该先炼内功,然后再练外功,然后大师让他拿一根管子对着半缸水吹气,说什么时候能把缸里的水吹到溢出来,就证明内功达到至高境界了。于是他就日复一日地刻苦练习,三年过去了,没有任何效果,但他想:既然师父那么说就一定有他的道理。
于是继续修炼。就这样过了十年,还是不行。终于,他失望了,决定不再修炼准备回家。到家碰到他爹,他爹就问他,说你拜师学艺学了十年学得怎么样啊? 他觉得很没面子,遂失落地低头叹了口气,等他抬头再看——他爹不见了……
什么是性能优化?
一款app除了要有令人惊叹的功能和令人发指的交互之外,在性能上也应该追求丝滑的要求,这样才能更好地提高用户体验。
线性数据结构
Hash表
结合了数组和链表的优点,增删改查都很快。
HashMap
SparseArray
HashMap 与 SparseArray
HashMap 和 SparseArray性能对比
数据结构如何选择
1.链表删除和新增数据快,数组查找和修改快,所以删除和新增数据操作多的场景用LinkedList,查找和修改操作多的场景用ArrayList。
2.如果key不是int类型的,那只能选择HashMap ,但Android中有一种应用场景,可以在key是String类型的情况下也用SparseArray,因为Android会在编译的时候把所有的资源编译为一个唯一的int型的资源id(包括String类型的资源),所以可以将String类型的key都写在strings.xml文件里,比如string1、string2、string3,然后将R.string.string1,R.string.string2,R.string.string3作为key存入SparseArray中。
3.本文主要讲解如何对ArrayList和LinkedList、HashMap和SparseArray进行选择,其他数据结构(比如栈,队列,堆,图,红黑树,字典树,B树等等)也都是根据具体的应用场景进行选择的。