文章目录
什么是性能优化?
一款app除了要有令人惊叹的功能和令人发指交互之外,在性能上也应该追求丝滑的要求,这样才能更好地提高用户体验。
几种数据结构比较
线性数据结构
顺序表与链表
Hash表
HashMap
SparseArray
HashMap 与 SparseArray
HashMap 和 SparseArray性能对比
内存
两个按钮操作,分别执行:添加100000(10万)个数字到HashMap和SparseArray中。然后查看内存使用情况。
final int LENGTH = 100000;
btnHashMap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
for (int i = 0; i < LENGTH; i++) {
hashMap.put(i, new byte[10]);
}
return null;
}
}.execute();
}
});
btnSparseArray.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
for (int i = 0; i < LENGTH; i++) {
sparseArray.put(i, new byte[10]);
}
return null;
}
}.execute();
}
});
8.3M到14.8M,增加了6.5M。
14.8M到17.6M,增加了1.8M。
可以看出SparseArray使用的内存远远小于HashMap
时间
final int LENGTH = 100000;
public void timerUseHashMap() {
long current = System.currentTimeMillis();
for (int i = 0; i < LENGTH; i++) {
hashMap.get(i);
}
long timer = System.currentTimeMillis();
Log.i("Test", "hashmap caused " + (timer - current));
}
public void timerUseSparseArray() {
long current = System.currentTimeMillis();
for (int i = 0; i < LENGTH; i++) {
sparseArray.get(i);
}
long timer = System.currentTimeMillis();
Log.i("Test", "sparsearray caused " + (timer - current));
}