之前看到一篇关于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。



















Android:使用SparseArray取代HashMap优化性能的更多相关文章

  1. 73.Android之SparseArray替代HashMap

    转载:https://liuzhichao.com/p/832.html HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果.最近在做一个Android项目,在代码中定 ...

  2. Android内存优化(使用SparseArray和ArrayMap取代HashMap)

    在Android开发时,我们使用的大部分都是Java的api,比方HashMap这个api,使用率非常高,可是对于Android这样的对内存非常敏感的移动平台,非常多时候使用一些java的api并不能 ...

  3. Android应用性能优化之使用SparseArray替代HashMap

    HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果.最近在做一个Android项目,在代码中定义这样一个变量,实例化时,Eclipse却给出了一个 performanc ...

  4. 关于Android中ArrayMap/SparseArray比HashMap性能好的深入研究

    由于网上有朋友对于这个问题已经有了很详细的研究,所以我就不班门弄斧了: 转载于:http://android-performance.com/android/2014/02/10/android-sp ...

  5. 性能优化:使用SparseArray代替HashMap<Integer,Object>(转)

    HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果.最近在做一个Android项目,在代码中定义这样一个变量,实例化时,Eclipse却给出了一个 performanc ...

  6. SparseArray替代HashMap来提高性能

    SparseArray是 Android框架独有的类,在标准的JDK中不存在这个类.它要比 HashMap 节省内存,某些情况下比HashMap性能更好,按照官方问答的解释,主要是因为SparseAr ...

  7. Android开发 使用SparseArray代替HashMap[转载]

    源作者:Android小Y链接:https://www.jianshu.com/p/1828f14d7955来源:简书 前言 Android开发中,一个好的应用,除了要有吸引人的功能和交互之外,在性能 ...

  8. 使用SparseArray代替HashMap

    HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果.最近在做一个Android项目,在代码中定义这样一个变量,实例化时,Eclipse却给出了一个 performanc ...

  9. Android 之SparseArray<E>详解

    SparseArray是android里为<Interger,Object>这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch) pr ...

随机推荐

  1. 【转】jvm内存结构

    JVM的基本结构 包括四部分:类加载器.执行引擎.内存区(运行时数据区).本地方法接口 类加载器:jvm启动时或类运行时将需要的class文件加载到JVM中. JVM内存申请过程如下: JVM 会试图 ...

  2. Nginx 通过 certbot 为网站自动配置 SSL 证书并续期

    一.背景知识 1.1.http 和 https 是什么? 简单来说,http 是一个传输网页内容的协议,比如你看到的 http 开头的网站 http://www.163.com ,其网页上的文字.图片 ...

  3. 梦想MxWeb3D,三维CAD协同设计平台 2019.05.05更新

    SDK开发包下载地址: http://www.mxdraw.com/ndetail_20140.html 在线演示网址: http://www.mxdraw.com:3000/ 1.  增加CAD绘图 ...

  4. 牛客多校Round 1

    Solved:1 rank:249 E. Removal dp i,j表示前i个数删除了j个且选择了第i个的答案 类似字符串的dp 预处理一下nex i_k即i后面k第一次出现的位置  就好转移了 # ...

  5. 模板—splay

    #include<iostream> #include<cstdio> #define cin(x) scanf("%d",&x) using na ...

  6. Spring Boot 与ElasticSearch

    一.ElasticSearch 介绍 ​ 开源的 ElasticSearch 是目前全文搜索引擎的首选,它是一个分布式搜索服务,提供Restful API,它可以快速地存储.搜索和分析海量数据.底层基 ...

  7. iconfig1

    #include<iostream> using namespace std; //测试 template 里面是否还可以有 template class alloc{ }; templa ...

  8. Python使用Flask框架,结合Highchart,搭配数据功能模块,加载 HTML 表格数据

    参考链接:https://www.highcharts.com.cn/docs/data-modules 1.javascript代码 var chart = Highcharts.chart('co ...

  9. vue列表渲染,以及鼠标点击改变样式的问题

    在实际项目中,我们进场会遇到鼠标点击该表某个DOM元素的样式,在原生的js或者jquery中,我们会比较熟练的实现这个需求,但是在vue中怎么实现呢? 直接操作DOM?NO!NO! 既然我们的项目使用 ...

  10. RabbitMq的简单使用

    本篇将介绍RabbitMq的一个简单使用例子,分别介绍生产者如何发送消息,消费者如何接收和处理消息 关于RabbitMQ的知识背景的文章非常多.我对它的总结是,解决高并发请求的瓶颈,将应用程序真正处理 ...