HashMap & SparseArray & ArrayMap 简单说明
HashMap
使用有限一维拉链数组存储结构,鉴于所用Entry结构{key, value, nextExtry},Key的hash值用于取余获得所属的数组行下标,通过链表方式顺序存放所有余数相同的各个Entry。该数组的每个存储单元被称为“桶”。
取值时依据hash定位到行,再遍历链表定位key对应的Entry对象,并通过此方式解决哈希冲突问题。
当 Entry总数据量 > 数组Length(桶容量) * 0.75默认加载因子时,数组将扩容至原数组2倍,并重新计算排布旧数据,重建数据结构,此步骤非常消耗性能,最佳方式是初始化HashMap为接近目标容量的2次幂大小,减少扩容次数。
桶容量设置得太高会导致内存浪费,而当数据量达到千万级别时容易产生大量冲突,导致冲突链表过长,影响性能。
SparseArray稀疏数组
Android框架内的优化型存储结构类,在key为整型数值类型时可考虑替代HashMap提供更有效的空间利用率。
内部通过两个平行数组方式分别(同步)存储key与value,key限定为int或long类型,节省内存,避免装箱拆箱。
采用二分法进行插入和查找,存储按大小排序,大数据集下数据插入速度慢,但查找性能高,在千级数据量内可取代HashMap。
ArrayMap
Android框架内的优化型存储结构类。
类似于SparseArray使用两个平行数组分别(同步)存储key与value,模拟Map使用方式,Key类型不限,同样采用二分法进行插入、查找。
HashMap & SparseArray & ArrayMap 简单说明的更多相关文章
- HashMap与ArrayMap(和SparseArray)的比较与选择
HashMap与ArrayMap(和SparseArray)的比较与选择 2017年12月26日 06:04:38 阅读数:61 标签: androidjavahashmaparraymap数据结构 ...
- 【转】HashMap,ArrayMap,SparseArray源码分析及性能对比
HashMap,ArrayMap,SparseArray源码分析及性能对比 jjlanbupt 关注 2016.06.03 20:19* 字数 2165 阅读 7967评论 13喜欢 43 Array ...
- HashMap、ArrayMap、SparseArray分析比较
http://blog.csdn.net/chen_lifeng/article/details/52057427
- HashMap就是这么简单【源码剖析】
前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树的基础了: Collection总览 List集合就这么简单[源码剖析] Ma ...
- JDK源码分析之hashmap就这么简单理解
一.HashMap概述 HashMap是基于哈希表的Map接口实现,此实现提供所有可选的映射操作,并允许使用null值和null键.HashMap与HashTable的作用大致相同,但是它不是线程安全 ...
- HashMap原理及简单实现
public class MyHashMap<K, V> { private class Entry<K, V> { int hash; K key; V value; Ent ...
- 数据结构HashMap(Android SparseArray 和ArrayMap)
HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在.在HashMap中,key-value总是会当做一个整体来处理,系统会根据 ...
- Android内存优化(使用SparseArray和ArrayMap代替HashMap)
在Android开发时,我们使用的大部分都是Java的api,比如HashMap这个api,使用率非常高,但是对于Android这种对内存非常敏感的移动平台,很多时候使用一些java的api并不能达到 ...
- Android内存优化(使用SparseArray和ArrayMap取代HashMap)
在Android开发时,我们使用的大部分都是Java的api,比方HashMap这个api,使用率非常高,可是对于Android这样的对内存非常敏感的移动平台,非常多时候使用一些java的api并不能 ...
随机推荐
- TW实习日记:第22天
今天开发项目的还没完成的功能点,没什么难的,样式复制粘贴,JSON表单配一配,接口调一调,基本就完成了.不过中间在写后台的一些接口时,发现被自己之前写的一些方法给坑了.为什么这样说呢,因为在之前的几个 ...
- system_Class类说明文档
system_Class类是FastCMS系统必须的,全局对象system是system_Class的实例,其主要包含二类操作: 1.token 操作: token可以存储当前访客的私有信息,取代se ...
- CSP201412-2:Z字形扫描
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...
- Centos7下安装mysql服务
yum install -y perl-Module-Install.noarch yum -y install perl perl-devel #命令下载mysql wget http://dev. ...
- 【Linux 运维】linux系统修改主机名
主机名的修改: 1.命名解释: [root@localhost~]# 分别代表: 用户名(root) 主机名(localhost) 当前路径(~,当前用户的home目录) 权限标志位(#代表root ...
- Python3 小工具-MAC泛洪
from scapy.all import * import optparse def attack(interface): pkt=Ether(src=RandMAC(),dst=RandMAC() ...
- 基于Kubernetes(k8s)的RabbitMQ 集群
目前,有很多种基于Kubernetes搭建RabbitMQ集群的解决方案.今天笔者今天将要讨论我们在Fuel CCP项目当中所采用的方式.这种方式加以转变也适用于搭建RabbitMQ集群的一般方法.所 ...
- “Hello world!”团队—选题展示
本次选题展示内容: 一.视频展示 链接:http://v.youku.com/v_show/id_XMzA5Mzk5NjYwOA==.html?sharefrom=iphone 视频截图链接:http ...
- 20172330 2017-2018-1 《Java程序设计》第七周学习总结
学号 2017-2018-1 <程序设计与数据结构>第七周学习总结 教材学习内容总结 这一章主要是对继承的学习: 继承是组织和创建类的基本技术,概念简单但影响重大,决定着面向对象软件的设计 ...
- IIS10和Tomcat8整合
在网上找了很久,也试了很多,都没有弄好.后来根据这个博客,做一些小修小改,终于成功了. 我是从里面的IIS与TOMCAT整合那里开始看的.第一步上面要创建一个注册表,我没有创建.我是创建了一个名为&q ...