HashMap 和 Array 有什么区别?

HashMap 和 Array 有什么区别?

  • 查找效率
    HashMap因为其根据hashcode的值直接算出index,所以其查找效率是随着数组长度增大而增加。
    ArrayMap使用的是二分法,当数组长度每增加一倍时,多进行一次判断,效率下降。

  • 扩容数量
    HashMap初始值16个长度,每次扩容的时候,直接申请双倍的数组空间。
    ArrayMap每次扩容的时候,如果size长度大于8时申请size*1.5个长度,大于4小于8时申请8个,小于4时申请4个。这样比较ArrayMap其实是申请了更少的内存空间,但是扩容的频率会更高。因此,如果数据量比较大的时候,还是使用HashMap更合适,因为其扩容的次数要比ArrayMap少很多。

  • 扩容效率
    HashMap每次扩容的时候重新计算每个数组成员的位置,然后放到新的位置。
    ArrayMap则是直接使用System.arraycopy,所以效率上肯定是ArrayMap更占优势。

  • 内存消耗
    以ArrayMap采用了一种独特的方式,能够重复的利用因为数据扩容而遗留下来的数组空间,方便下一个ArrayMap的使用。而HashMap没有这种设计。 由于ArrayMap之缓存了长度是4和8的时候,所以如果频繁的使用到Map,而且数据量都比较小的时候,ArrayMap无疑是相当的是节省内存的。

      总结
      综上所述,数据量比较小,并且需要频繁的使用Map存储数据的时候,推荐使用ArrayMap。 而数据量比较大的时候,则推荐使用HashMap。
    
ArrayListHashMap都是常用的集合类,它们在元素数量增加时都需要进行扩容操作。 ArrayList的扩容机制: 当ArrayList中的元素数量超过了其当前容量时,ArrayList会创建一个更大的数组,并将原有元素复制到新数组中。默认情况下,ArrayList的扩容机制是将当前容量的大小增加一半,即新容量为原容量的1.5倍。这个过程称为"增量式扩容"。例如,如果当前容量是10,当添加第11个元素时,ArrayList会创建一个新容量为15的数组,并将原有元素复制到新数组中。 HashMap的扩容机制: 当HashMap中的元素数量超过了负载因子(load factor)与当前容量的乘积时,HashMap会进行扩容操作。负载因子是一个介于01之间的浮点数,默认值为0.75。扩容时,HashMap会创建一个更大的数组,并重新计算每个元素在新数组中的位置。具体的扩容过程如下: 1. 创建一个新的容量为原容量的两倍大小的数组。 2. 遍历原数组中的每个元素,将其重新计算在新数组中的位置,并将其放入新数组中。 3. 将新数组设置为HashMap的内部数组,并更新容量。 需要注意的是,ArrayListHashMap在进行扩容操作时都需要进行元素的复制或重新计算位置,这可能会带来一定的性能开销。因此,在使用这些集合类时,可以预估元素的数量范围,提前设置合适的初始容量,以减少扩容操作的频率,提高性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值