• Android:使用SparseArray取代HashMap优化性能


    之前看到一篇关于adapter的文章用到了SparseArray,所以在这里写写关于SparseArray的使用方法。

    SparseArray是官方针对安卓所写的容器,与HashMap类似,只是性能比HashMap好。


    SparseArray实现了Cloneable接口,还能够调用clone方法。

    首先看看SparseArray的使用方法:

    构造:

    SparseArray的构造与我们用惯的HashMap,ArrayList一样也是new出一个实例然后使用。

    SparseArray<E> sa=new SparseArray<E>();
    顺便提一下java1.7支持这样写:

    SparseArray<E> sa=new SparseArray<>();


    也能够在构造的时候就指定大小:

    SparseArray<E> sa=new SparseArray<E>(11);
    假设构造的时候不指定大小,则默觉得10


    加入元素:

    用惯ArraList和HashMap的我们知道要往容器里面加入元素能够分别调用add和put方法。
    SparseArray也一样,能够调用put(int key,E value);
    相信有读者一经发现上面构造SparseArray的时候已经发现,构造的时候仅仅指定一个泛型,而不像HashMap那样构造的时候要指定两个泛型类型:
    new HashMap<String,String>(); 
    仅仅须要这样:
    SparseArray<E> sa=new SparseArray<E>();
    那是由于SparseArray的键仅仅能是int形式所以构造的时候仅仅指定值得泛型就可以。

    同一时候也就是说,仅仅能在键为int形式的时候能够使用SparseArray其他情况还是须要使用Map。

    除了put方法能够往SparseArray加入元素之外,还能够通过append加入元素。

    public void append(int key, E value) 
    SparseArray储存数据是使用二分法储存。说储存的数据是依据键的大小,从小到大排列。


    取值:

    既然能够加入那么自然能够取出来:
    public E get(int key) ;
    依据键取值。
    除此之外另一个方法能够取值:
    public E get(int key, E valueIfKeyNotFound) ;
    能够看到多了一个參数,从第二个參数的名字能够猜到。当找不到该键的值得时候默认使用第二个參数的值。

    除了按键取值之外还能够按顺序取键。按顺序取值:
    查看第几个位置的值:
    public int keyAt(int index)  
    查看第几个位置的键:
    public E valueAt(int index)  
    假设所查的键或值没有的话会返回负数。

    删除:

    delete(int  key)   
    remove(int key)  delete与remove的效果是一样的这里不多说
    除此之外还有:
    removeAt(int index) //按顺序删除
    clear() 所有清空

    改:

    public void setValueAt(int index, E value)  
    public void put(int key, E value)  

    setValueAt能够将index位置上的值改成value
    而put方法前面说过。假设说put进去的键已经存在那么就会覆盖,达到改动的效果。

    假设put进去的键还没有的话就添加。




    说完主要的增删改查再扯一下其他:

    既然官方推荐使用SparseArray,那么在编码过程中遇到键为int形式的则尽量使用SparseArray取代map。























  • 相关阅读:
    flex布局
    cookie设置、获取、删除
    使用Object对象的toString()方法自定义判断数据类型方法
    git使用汇总
    闭包和面向对象
    闭包
    java8之一文彻底弄懂lambda表达式
    正确理解MESI协议
    二叉树中的节点删除-----按照最底层最右边的节点收缩
    按层次插入二叉树
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6857982.html
Copyright © 2020-2023  润新知