HashMap使用时指定容量

目录

文章目录

一、为什么要指定容量

二、使用方式

1.确定阈值

2.示例

总结


一、为什么要指定容量

其实核心点,就是避免数据量慢慢增加,导致反复触发扩容,影响性能。

二、使用方式

1.确定阈值

阈值的计算方式:(需要存储的元素个数/负载因子)+1

负载因子默认为0.75

如果要存放4个元素,4/0.75+1=6.33,指定6和7都可以,因为HashMap会转换成大于该capacity的第一个2的幂作为容量

所以传5,6,7,8 都是 8 ;

传9,10,11,12,13,14,15,16 都是 16 ;

2.示例

    @Test
    public void mapTest() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        //可以存放的元素个数为4*0.75=3
        //阈值的设定:(需要存储的元素个数/负载因子)+1
        Map<String,String> map = new HashMap<>(4);
        Class<? extends Map> mapClass = map.getClass();
        Method capacity = mapClass.getDeclaredMethod("capacity");
        capacity.setAccessible(true);

        map.put("1","第一个元素插入");
        System.out.println("capacity:" + capacity.invoke(map) + "    size:" + map.size());
        map.put("2","第二个元素插入");
        System.out.println("capacity:" + capacity.invoke(map) + "    size:" + map.size());
        map.put("3","第三个元素插入");
        System.out.println("capacity:" + capacity.invoke(map) + "    size:" + map.size());
        map.put("4","第四个元素插入");
        System.out.println("capacity:" + capacity.invoke(map) + "    size:" + map.size());
        map.put("5","第五个元素插入");
        System.out.println("capacity:" + capacity.invoke(map) + "    size:" + map.size());
    }

总结

最后再补一嘴, 默认指定容量,其实就是 内存换性能

如果可以确认map存放的元素较少,小于默认指定的16(即12个元素)时,可以指定一下,减少内存 。

list集合初始化时,如果能够确认集合的大小,可以在初始化时设定集合的大小。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值