zoukankan      html  css  js  c++  java
  • HashMap & SparseArray & ArrayMap 简单说明

    HashMap

    使用有限一维拉链数组存储结构,鉴于所用Entry结构{key, value, nextExtry}Keyhash值用于取余获得所属的数组行下标,通过链表方式顺序存放所有余数相同的各个Entry。该数组的每个存储单元被称为“桶”。

    取值时依据hash定位到行,再遍历链表定位key对应的Entry对象,并通过此方式解决哈希冲突问题。

    当 Entry总数据量 数组Length(桶容量) * 0.75默认加载因子时,数组将扩容至原数组2倍,并重新计算排布旧数据,重建数据结构,此步骤非常消耗性能,最佳方式是初始化HashMap为接近目标容量的2次幂大小,减少扩容次数。

    桶容量设置得太高会导致内存浪费,而当数据量达到千万级别时容易产生大量冲突,导致冲突链表过长,影响性能。

    SparseArray稀疏数组

    Android框架内的优化型存储结构类,在key为整型数值类型时可考虑替代HashMap提供更有效的空间利用率。

    内部通过两个平行数组方式分别(同步)存储keyvaluekey限定为intlong类型,节省内存,避免装箱拆箱。

    采用二分法进行插入和查找,存储按大小排序,大数据集下数据插入速度慢,但查找性能高,在千级数据量内可取代HashMap

    ArrayMap

    Android框架内的优化型存储结构类。

    类似于SparseArray使用两个平行数组分别(同步)存储keyvalue,模拟Map使用方式,Key类型不限,同样采用二分法进行插入、查找。

  • 相关阅读:
    五、敏捷开发框架 初识组件式开发
    winform 控制Text Box只能输入英文数字和退格键
    WPF 常用控件属性
    问题分析
    串口通讯学习
    解决MVC中Model上的特性在EF框架刷新时清空的问题
    论序列化与反序列化
    dynamics 365 安全角色及权限
    .NET Core 依赖注入框架 框图笔记
    C#基本类型的取值范围与 .NET框架类型的对应
  • 原文地址:https://www.cnblogs.com/wavky/p/5701221.html
Copyright © 2011-2022 走看看