美文网首页
从一个面试开始来谈Map 的初始容量

从一个面试开始来谈Map 的初始容量

作者: 大唐_高僧 | 来源:发表于2019-03-05 16:32 被阅读0次

从一个面试开始的Map

以下是面试我的面试题。

1、你使用java多久了,在使用java过程中,你和我说一下java 的基本类型,int占用几个字节,它的最大值是多少(用幂指函数形式表示就可以)为什么?

答:byte、short、int。。。。布拉布拉。4个字节,最大是2^31-1(其他的同学面试者回答多少的都有,还有回答是-128--127 的,这个让我真的是一口老血喷出来啊,当时我就说那就是说int a = 1000,这样赋值是不对的喽?)

3、那你在工作中使用过HashMap吗?你可以和我谈谈它吗?

答:key-value形式,线程不安全等等,key可以为null,等等xxxxx

4、那你知道它的初始容量是多少吗?那要是我使用Map map = new HashMap(12);这个在什么时候开始扩容的?

答:初始容量是16,在 12*0.75=9的时候开始扩容 ,这个同学开始一顿 什么加载因子啦一大堆开始了。

5、接着我又问 如果要是 Map  map = new HashMap(11);这个在什么时候开始扩容,这时候面试者语塞了,因为他发现11*075 好像是不知道是多少了,乘出来的不是一个整数,这下子就完全懵逼了。其实的话面试过程中Map这个类有很多的问题要问,但是今天我先和大家来一起讨论以下这个

接下来开始上答案,以jdk1.8版本为例。

其实我们在初始创建一个HashMap 的时候,当我们不给任何参数的时候,各个参数都会使用默认的值。

当我们在初始化 HashMap 的时候,传入相应容量的时候,其实这时候会在 调用 tableSizeFor(int cap) 这个方法,这个方法总会返回2^n 的值。

从下面这个方法可以看出来,你自己可以定义一个扩容因子,例如:Map<String,Object> map = new HashMap<String,Object>(11,0.45f); 但是建议是使用默认的0.75,在这里不做解释为什么,可以自己出门左转 输入www.google.com 之后查查为什么使用0.75。

例如一个数字5,在 二进制中的表示方式是 00000000 00000000 00000000 00000101 ,通过下面的方法是 首先将本上的值减去1,然后不停的右移或上本身的值,这样就是所有的位上都是会1,然后在在通过n+1之后一定是一个2^n 的结果。这就是为什么在开始的时候要减去1的原因。

这样即使是你传入的是一个11,或者是一个其他数的值,那么它开始扩容的时候一定是 2^n * 0.75(这里假如你用的是默认的扩容因子)。

相关文章

  • 从一个面试开始来谈Map 的初始容量

    从一个面试开始的Map 以下是面试我的面试题。 1、你使用java多久了,在使用java过程中,你和我说一下jav...

  • 集合之Map(key-value,键值对形式,键唯一,值可重复)

    一、Map常见的子类有: 默认初始容量是16加载因子是0.75,即当 元素个数 超过 容量长度的0.75倍 (即1...

  • java集合之Map接口

    Map集合中常用的方法 直接举栗子 Properties HashMap默认初始化容量是16,默认加载因子0.75...

  • 2019-11-15

    HashMap 初始容量是16 负载因子是0.75 第一次创建map是空的 只有put的时候才会默认16个 什么时...

  • 给HashMap初始化了容量,却让性能变加更糟了?

    前言 项目中,看到大家已经意识到初始化HashMap时给Map指定初始容量大小,甚是欣慰。但仔细一看,发现事情好像...

  • HashMap源码分析 2018-03-11

    HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。容量 是哈希表中桶的数量,初始容量 只...

  • go学习笔记(一)

    (1)从map中取值问题可以对未初始化的map进行取值,但取值来的是对应类型的零值。但不能对未初始化的map进行赋...

  • HashMap的了解与深入

    HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量 是哈希表中桶的数量,初始容量只是哈希表在创...

  • 大数据

    Map-Reduce和Hadoop逐渐称为面试热门。还有,容量的转换如下: bit就是位,也叫比特位,是计算机表示...

  • HashMap分析

    首先从构造方法说起, 初始化有两个参数initialCapacity 代表初始容量,实际容量为大于initialC...

网友评论

      本文标题:从一个面试开始来谈Map 的初始容量

      本文链接:https://www.haomeiwen.com/subject/bpynuqtx.html