HashMap源码--(二)构造器
来源:互联网 发布:怪物猎人ol mac 编辑:程序博客网 时间:2024/06/11 01:39
HashMap源码–(二)构造器
HashMap有4个构造器,主要分为两种,一种是创建空元素的HashMap,一种是传入一个Map,将Map中的元素复制成一个新的HashMap。
无论是哪个构造器都需要先给容量、加载因子和Entry数组。
1、指定容量和加载因子HashMap(int initialCapacity, float loadFactor)
/** * 指定容量和加载因子的空元素构造器 * * @param initialCapacity 容量 * @param loadFactor 加载因子 * @throws IllegalArgumentException 当容量为负数或加载因子为非正 * 数时抛异常 */ public HashMap(int initialCapacity, float loadFactor) { //指定容量为负时抛非法数据异常 if (initialCapacity < 0) throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity); //指定容量不能超过最大值 if (initialCapacity > MAXIMUM_CAPACITY) initialCapacity = MAXIMUM_CAPACITY; //指定加载因子非数字或非正数时抛异常 if (loadFactor <= 0 || Float.isNaN(loadFactor)) throw new IllegalArgumentException("Illegal load factor: " + loadFactor); // 查找大于等于initialCapacity的2的幂指数 int capacity = 1; while (capacity < initialCapacity) capacity <<= 1; //加载因子 this.loadFactor = loadFactor; //阈值 threshold = (int)(capacity * loadFactor); //Entry数组 table = new Entry[capacity]; //初始化,暂时为空方法 init(); }
这个构造器是基础构造器,其他的构造器都是用它来初始化属性。
2、指定容量HashMap(int initialCapacity)
/** * 容量指定、加载因子默认0.75的空元素构造器 * * @param initialCapacity 指定容量 * @throws IllegalArgumentException 容量为负抛异常 */ public HashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR); }
同之前构造器一样,都是指定容量和加载因子。
3、默认构造器HashMap()
/** * 默认构造器,采用默认的容量(16)和默认的加载因子(0.75)。 */ public HashMap() { //加载因子 this.loadFactor = DEFAULT_LOAD_FACTOR; //阈值 threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR); //Entry数组 table = new Entry[DEFAULT_INITIAL_CAPACITY]; init(); }
4、传入Map的构造器HashMap(Map<? extends K, ? extends V> m)
/** * 传入Map,复制Map创建一个新的HashMap,容量为16和 * m.size()/DEFAULT_LOAD_FACTOR(0.75)的最大值, * 加载因子为默认加载因子(0.75) * @param m 指定的Map * @throws NullPointerException Map为空时抛异常 */ public HashMap(Map<? extends K, ? extends V> m) { //容量为m.size()/默认加载因子和默认容量的大者 this(Math.max((int) (m.size() / DEFAULT_LOAD_FACTOR) + 1, DEFAULT_INITIAL_CAPACITY), DEFAULT_LOAD_FACTOR); //将Map全部添加到HashMap中 putAllForCreate(m); }
阅读全文
0 0
- HashMap源码--(二)构造器
- HashMap源码解析(二)
- HashMap源码分析(二)get
- 【Java深入】HashMap源码剖析(二)
- jdk1.8 HashMap源码分析(构造函数)
- Java集合源码解析(二)HashMap源码解析
- JAVA源码分析-HashMap源码分析(二)
- HashMap源码解析——构造方法
- Java集合源码剖析(二)【HashMap、Hashtable】
- HashMap源码注解 之 成员变量(二)
- 浅析Java集合类源码(二)--- HashSet, HashMap, Hashtable
- JDK 1.8 HashMap 源码阅读二
- STL源码:空间配置器(二)构造和析构construct()/destroy()
- JQuery3.1.1源码解读(二)【init构造器】
- Spark源码导读(二)——聊天窗口构造
- 【jQuery源码浅析】(二)--jQuery的构造--$()
- 构造器代理 (二)
- HashMap 使用 (二)
- 13.1 初识@Controller
- 直播技术相关
- Spring Boot,Spring Data JPA多数据源支持配置
- java中的四种引用介绍,强引用,软引用,弱引用,虚引用
- zkServer.sh 分析
- HashMap源码--(二)构造器
- 学习笔记:ES6之Generator
- Redis lesson13 Redis的事务机制
- Jenkins部署Web项目到远程tomcat(四)
- Decode Ways --lintcode
- 3、Selenium + Python 实现 UI 自动化测试-元素定位
- android 绘图之双缓冲绘图
- 2017腾讯WE大会门票—早鸟票
- Python中的__name__属性