• 7.2 基础知识ArrayMap


    1、android源码中维护有键值对,通过键可以找到值

      Java中Object是所有类的父类,对于键值对的保存如果使用个ObjectArray数组,比如N个位置存放键,N+1的位置就存放值,那么如果键值对很多是,查找效率不高。

      在android源码中可以查看ArrayMap.java文件,其维护了键值对,其原理是通过键(key值)得到一个hash值,在根据hash值来确定index。

      ArrayMap类有两个数字mArray和mHashes,mArray里面就是存放的键值对,比如N个位置存放键,N+1的位置就存放值;mHashes存放的是key值的hash值,这个hash值从小到大排列,通过key值算出hash值,在mHashes数组中通过二分法查找并返回所有的index1信息,可能有多个相等的hash值,根据index1的值乘以2得到mArray中对应的index2,如果mHashes数组中有多个相同的hash,把key值取出来比较,index2+1就是值了,注意,虽然hash值是从小到到排列的,但是其和键值对是一一对应的。

      hash值和键值对一一对应的原因是存放的时候,根据key计算(indexofkey(k))是index,如果index大于等于0,说明mArray里面已经存放了键值对,这个时候直接替换值就可以,如果index小于0,对index取反,取法后的值除2就是hash值在mhashes数组中的位置,这个index可能在mArray数组的中间,需要移动后面的键值对,或者mArray需要扩容,mhashes数组可能也需要移动,在对着两个数组赋值

  • 相关阅读:
    firewall
    mtu测试
    bps和pps
    PC上装VM上装虚拟机
    jira添加工作流
    【Linux系列】Centos 7安装 PHP(四)
    【Linux系列】Centos 7安装 Nginx(三)
    【Linux系列】配置Centos 7的软件源(二)
    【Linux系列】Centos 7安装以及网络配置(一)
    Python3获取豆瓣图书标签的前20本热门书籍(一)
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/9127947.html
Copyright © 2020-2023  润新知