赞
踩
HashMap是基于哈希表,实现Map接口的双列集合,元素以Key-Value的形式存储,允许Key和value为空,其中key为空的只能有一个,HashMap是无序的,线程不安全的。定义为:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
主要属性:
- // 初始化大小大小
- static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
-
- // 最大容量,如果指定的容易大于最大容量,将使用此值
- static final int MAXIMUM_CAPACITY = 1 << 30;
-
- // 默认负载因子
- static final float DEFAULT_LOAD_FACTOR = 0.75f;
-
- // 当add一个元素到某个位桶,其链表长度达到8时将链表转换为红黑树
- static final int TREEIFY_THRESHOLD = 8;
- static final int UNTREEIFY_THRESHOLD = 6;
- static final int MIN_TREEIFY_CAPACITY = 64;
-
- // 修改的次数
- transient int modCount;
-
- // map是否扩容的决定性因素,当实际大小(容量*填充比)超过临界值时,会进行扩容
- int threshold;
-
- // 负载因子
- final float loadFactor;
-
- // 存放元素的个数
- transient int size;
* 数组:一段连续控件存储数据,指定下标的查找,时间复杂度O(1),通过给定值查找,需要遍历数组,自已对比复杂度为O(n) 二分查找插值查找,复杂度为O(logn)
* 线性链表:增 删除仅处理结点,时间复杂度O(1)查找需要遍历也就是O(n) * 二叉树:对一颗相对平衡的有序二叉树,对其进行插入,查找,删除,平均复杂度O(logn)
* 哈希表:哈希表中进行添加,删除,查找等操作,性能十分之高,不考虑哈希冲突的情况下,仅需一次定位即可完成,时间复杂度为O(1)哈希表的主干就是数组
* hash冲突: 如果两个不同的元素,通过哈希函数得出的实际存储地址相同怎么办?也就是说,当我们对某个元素进行哈希运算,得到一个存储地址,然后要进行插入的时候,发现已经被其他元素占用了,其实这就是所谓的哈希冲突,也叫哈希碰撞。
- HashMap() //无参构造方法
- HashMap(int initialCapacity) //指定初始容量的构造方法
- HashMap(int initialCapacity, float loadFactor) //指定初始容量和负载因子
- HashMap(Map<? extends K,? extends V> m) //指定集合,转化为HashMap
- public HashMap() {
- this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
- }
- public HashMap(int initialCapacity) {
- // 制定初始容量,负载因子为默认值
- this(initialCapacity, DEFAULT_LOAD_FACTOR);
- }
对入参的初始容量和负载因子做校验。如果初始容量小于0则抛出异常,如果大于最大值则使用最大值;如果负载因子小于0或为空为NaN则抛异常。
- 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);
- this.loadFactor = loadFactor;
- this.threshold = tableSizeFor(initialCapacity);
- }
- public HashMap(Map<? extends K, ? extends V> m) {
- // 负载因子使用默认
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。