1
2
3
4
5
6
观察jdk中HashMap的源码,我们知道极限值为2的31次方。

void resize(int newCapacity) {
Entry[] oldTable = table;
int oldCapacity = oldTable.length;
if (oldCapacity == MAXIMUM_CAPACITY) {
threshold = Integer.MAX_VALUE;//将threshold置为Integer.MAX_VALUE
return;//当HashMap的容量已经是2的31次方的时候,直接返回。
}

Entry[] newTable = new Entry[newCapacity];
transfer(newTable);
table = newTable;
threshold = (int)(newCapacity * loadFactor);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
观察jdk中源码可发现当HashMap的容量已经是2的31次方的时候,就不会在进行扩容了。

/**
* The next size value at which to resize (capacity * load factor).
* @serial
*/
int threshold;
1
2
3
4
5
如上为对threshold的定义。

/**
* Adds a new entry with the specified key, value and hash code to
* the specified bucket. It is the responsibility of this
* method to resize the table if appropriate.
*
* Subclass overrides this to alter the behavior of put method.
*/
void addEntry(int hash, K key, V value, int bucketIndex) {
Entry<K,V> e = table[bucketIndex];
table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
if (size++ >= threshold)
resize(2 * table.length);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
观察如上源码可知,当添加完元素后的容量大于threshold,就调用resize方法。
---------------------
作者:liudezhicsdn
来源:CSDN
原文:https://blog.csdn.net/liudezhicsdn/article/details/51234292?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

HashMap最大容量为什么是2的32次方的更多相关文章

  1. HashMap的最大容量为什么是2的30次方?

    今天看HashMap的底层实现,发现HashMap的最大容量规定为: // 最大容量(必须是2的幂且小于2的30次方,传入容量过大将被这个值替换) static final int MAXIMUM_C ...

  2. 为什么hashmap的容量永远要是2的次方

    源码hashmap.java文件中有个函数叫tableSizeFor(),他的作用是,通过-1>>>n-1返回一个大于n的最小二次幂,n为map之前的容量,而函数返回值就是扩容的二次 ...

  3. 2的32次方 分类: C#小技巧 2014-08-05 18:18 406人阅读 评论(0) 收藏

    版权声明:本文为博主原创文章,未经博主允许不得转载.

  4. HashMap原理详解

    HashMap 概述 HashMap 是基于哈希表的 Map 接口的非同步实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.此类不保证映射的顺序,特别是它不保证该顺序恒久不 ...

  5. 深入Java集合学习系列:HashMap的实现原理

    1.    HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变 ...

  6. 深入Java集合学习系列:HashMap的实现原理--转

    原文出自:http://www.cnblogs.com/xwdreamer/archive/2012/06/03/2532832.html 1. HashMap概述: HashMap是基于哈希表的Ma ...

  7. 转:Java HashMap实现详解

    Java HashMap实现详解 转:http://beyond99.blog.51cto.com/1469451/429789 1.    HashMap概述:    HashMap是基于哈希表的M ...

  8. 浅谈HashMap的实现原理

    1.    HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变 ...

  9. 转载 hashmap java8前的原理实现

    http://zhangshixi.iteye.com/blog/672697 1.    HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允 ...

随机推荐

  1. hdu 4460spfa用map来实现

    #include<stdio.h> #include<string.h>   #include <iostream> #include <algorithm& ...

  2. cp: omitting directory解决方案

    cp: omitting directory是因为目录下面还有目录.应该使用递归方法.需要加入-r参数. 及:cp -r 该目录名.

  3. 【BZOJ4736】温暖会指引我们前行(LCT)

    题意:有一张图,每条边有一个不同的编号,长度和权值,维护以下操作: 1.加边 2.修改边长 3.询问两点之间在最小权值最大的前提下的唯一路径长度 n<=100000 m<=300000 思 ...

  4. PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR[]转载

    REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP.如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP. HTTP_CLIENT_IP 是代理服务器发送的HTTP头. ...

  5. mysql针对转义字符的模糊搜索

    由于urlencode之后会产生很多'%'符号,这个符号在mysql模糊搜索中代表任意字符,显示会出现问题,例如 name字段经过urlencode之后变成‘%E6%9D%8E%E5%87%A1’,如 ...

  6. Event Logging 技术简介

    https://blog.csdn.net/xiliang_pan/article/details/41805023

  7. 通过socket过去本地ip,port和远端ip,port

    struct sockaddr addr;struct sockaddr_in* addr_v4;int addr_len = sizeof(addr); //获取local ip and portZ ...

  8. Atom编辑Markdown文件保存后行尾的空格自动消失的问题解决

    Markdown文件的行尾增加两个空格表示一行结束需要换行. 但保存文件后,行尾的空格自动消失,导致不换行. 解决方法: 1.[Edit]->[Preferences]->[Package ...

  9. Python访问MySQL数据库并实现其增删改查功能

    概述:对于访问MySQL数据库的操作,我想大家也都有一些了解.不过,因为最近在学习Python,以下就用Python来实现它.其中包括创建数据库和数据表.插入记录.删除记录.修改记录数据.查询数据.删 ...

  10. curl 中文乱码

    curl 中文乱码 学习了:https://blog.csdn.net/thc1987/article/details/52583789 学习了: http://blog.itpub.net/2903 ...