使用HashMap时为什么需要设置初始化大小

使用HashMap时为什么需要设置初始化大小

HashMap有扩容机制,就是当达到扩容条件时会进行扩容。HashMap的扩容条件就是当HashMap中的元素个数(size)超过临界值(threshold)时就会自动扩容。在HashMap中,threshold = loadFactor * capacity。
所以,如果我们没有设置初始容量大小,随着元素的不断增加,HashMap会发生多次扩容,而HashMap中的扩容机制决定了每次扩容都需要重建hash表,是非常影响性能的。

话不多说上代码:
需要循环10000次,同时往map中插入一万条键和值。如果初始化大小为16的话,那么需要扩容6250次,耗时为12毫秒。
相对应的如果一开始就就初始化大小为100000的话,就不需要扩容了,耗时为5毫秒。

public static void main(String[] args) {
    Map<Integer, Integer> map = new HashMap<>(16);
    long start = System.currentTimeMillis();
    for (int i = 0; i < 100000; i++) {
      map.put(i, i);
    }
    System.out.println("指定大小16耗时为:" + (System.currentTimeMillis() - start));

    Map<Integer, Integer> map02 = new HashMap<>(100000);
    start = System.currentTimeMillis();
    for (int i = 0; i < 100000; i++) {
      map02.put(i, i);
    }
    System.out.println("指定大小200耗时为:" + (System.currentTimeMillis() - start));
  }

代码执行结果为:
执行结果为
结论:
在编写代码时还是尽量给出初始化值,当然如果不给出初始化值的话,默认的大小为16.

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值