JAVA基础 - ArrayMap

ArrayMap

优势:

  1. 相比 hashMap 不会重建 hash映射,不会创建额外的对象。
    1. 删除时 缩小存储当前数组 (重点)
      1. remove()
      2. removeAt()
// 满足 大于  (BASE_SIZE * 2) 且  长度 小于 mHashes 三分之一
if (mHashes.length > (BASE_SIZE * 2) && mSize < mHashes.length / 3) {
                // Shrunk enough to reduce size of arrays.  We don't allow it to
                // shrink smaller than (BASE_SIZE*2) to avoid flapping between
                // that and BASE_SIZE.
                final int n = osize > (BASE_SIZE * 2) ? (osize + (osize >> 1)) : (BASE_SIZE * 2);


                final int[] ohashes = mHashes;
                final Object[] oarray = mArray;
                allocArrays(n);
  1. size == 4 || size == 8 内存分配有可能进入 缓存池。
  2. 二分法精妙之处
    数据可以更快定位 配合数组 直接定位到。
  3. 扩容规律 ( 都在默认情况下: 比 hashMap 扩容要小 内存占用小)
    4 8 ( 8 > (osize + (osize >> 1) ) )
  4. System.arraycopy 使用
  //当需要插入的位置不在数组末尾时,需要将index位置后的数据通过拷贝往后移动一位
        if (index < osize) {
            System.arraycopy(mHashes, index, mHashes, index + 1, osize - index);
            System.arraycopy(mArray, index << 1, mArray, (index + 1) << 1, (mSize - index) << 1);
        }

说明:

key的hash 值 会存入 hash数组中,
array 对象 存储方式时   key(index =0 )  value (index = 1)
节省资源,节省内存

劣势:

1. 不合适大量数据,效率比hashmap 低。
2. 不可以线程并发操作

小技巧:
明确数据容量:
设置 capacity = 4 || capacity = 8
而不是设置 3 || 7

参考

http://gityuan.com/2019/01/13/arraymap/

©️2020 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值