大佬的理解->Java集合值HashMap
1、HashMap特点
存放的元素都是键值对(key-value),key是唯一的,value是可以重复的存放的元素也不保证添加的顺序,即是无序的存放的元素的键可以为null,但是只能有一个key为null,可以有多个value为null(前提是存放的是HasHap对象)如果新添加的元素的键(key)在集合中已经存在,自动将新添加的值覆盖到原有的值2、底层实现
HashMap的底层使用的是Node对象数组;
HashMap源码- transient Node<K,V>[] table; //Node对象数组
- //Node类
- static class Node<K,V> implements Map.Entry<K,V> {
- final int hash;
- final K key;
- V value;
- Node<K,V> next;
- ......
- }
复制代码 3、扩容
- HashMap的底层使用的是Node对象数组,初始容量(未自定义)是16,根据负载因子跟数组容量,计算出扩容临界值,每当存放元素达到了临界值就可以扩容,而不是等到数组长度不够;
- 每次扩容,都是原有数组容量的2倍,必须要保证是2的整数次幂(底层算法实现),最大容量是2的30次方;
初始容量和默认扩容因子- /**
- * Constructs an empty <tt>HashMap</tt> with the default initial capacity
- * (16) and the default load factor (0.75).
- */
- //初始容量为16
- static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
- //默认扩容因子为0.75
- static final float DEFAULT_LOAD_FACTOR = 0.75f;
- //最大容量是2的30次方
- static final int MAXIMUM_CAPACITY = 1 << 30;
- public HashMap() {
- this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |