Android性能优化之SparseArray

文章目录

  • 什么是性能优化?
  • 几种数据结构比较
    • 线性数据结构
    • 顺序表与链表
    • Hash表
    • HashMap
    • SparseArray
    • HashMap 与 SparseArray
  • HashMap 和 SparseArray性能对比
    • 内存
    • 时间

什么是性能优化?

一款app除了要有令人惊叹的功能和令人发指交互之外,在性能上也应该追求丝滑的要求,这样才能更好地提高用户体验。Android性能优化之SparseArray_第1张图片


几种数据结构比较

线性数据结构

Android性能优化之SparseArray_第2张图片

顺序表与链表

Android性能优化之SparseArray_第3张图片

Hash表

Android性能优化之SparseArray_第4张图片

HashMap

Android性能优化之SparseArray_第5张图片

SparseArray

Android性能优化之SparseArray_第6张图片
Android性能优化之SparseArray_第7张图片

HashMap 与 SparseArray

Android性能优化之SparseArray_第8张图片


HashMap 和 SparseArray性能对比

内存

两个按钮操作,分别执行:添加10000个数字到HashMap和SparseArray中。然后查看内存使用情况。

 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();
            }
        });

Android性能优化之SparseArray_第9张图片

Android性能优化之SparseArray_第10张图片
8.3M到14.8M,增加了6.5M。


Android性能优化之SparseArray_第11张图片
14.8M到17.6M,增加了1.8M。

可以看出SparseArray使用的内存远远小于HashMap


时间

    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));
    }

Android性能优化之SparseArray_第12张图片

你可能感兴趣的:(04,Android性能优化)