当前位置:   article > 正文

new hashmap 初始大小_HashMap详解

new hashmap

af75788c485363742347d67b54abfdc7.png

一、概述

HashMap是基于哈希表,实现Map接口的双列集合,元素以Key-Value的形式存储,允许Key和value为空,其中key为空的只能有一个,HashMap是无序的,线程不安全的。定义为:

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

主要属性:

  1. // 初始化大小大小
  2. static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
  3. // 最大容量,如果指定的容易大于最大容量,将使用此值
  4. static final int MAXIMUM_CAPACITY = 1 << 30;
  5. // 默认负载因子
  6. static final float DEFAULT_LOAD_FACTOR = 0.75f;
  7. //add一个元素到某个位桶,其链表长度达到8时将链表转换为红黑树
  8. static final int TREEIFY_THRESHOLD = 8;
  9. static final int UNTREEIFY_THRESHOLD = 6;
  10. static final int MIN_TREEIFY_CAPACITY = 64;
  11. // 修改的次数
  12. transient int modCount;
  13. // map是否扩容的决定性因素,当实际大小(容量*填充比)超过临界值时,会进行扩容
  14. int threshold;
  15. // 负载因子
  16. final float loadFactor;
  17. // 存放元素的个数
  18. transient int size;
* 数组:一段连续控件存储数据,指定下标的查找,时间复杂度O(1),通过给定值查找,需要遍历数组,自已对比复杂度为O(n) 二分查找插值查找,复杂度为O(logn)
* 线性链表:增 删除仅处理结点,时间复杂度O(1)查找需要遍历也就是O(n) * 二叉树:对一颗相对平衡的有序二叉树,对其进行插入,查找,删除,平均复杂度O(logn)
* 哈希表:哈希表中进行添加,删除,查找等操作,性能十分之高,不考虑哈希冲突的情况下,仅需一次定位即可完成,时间复杂度为O(1)哈希表的主干就是数组
* hash冲突: 如果两个不同的元素,通过哈希函数得出的实际存储地址相同怎么办?也就是说,当我们对某个元素进行哈希运算,得到一个存储地址,然后要进行插入的时候,发现已经被其他元素占用了,其实这就是所谓的哈希冲突,也叫哈希碰撞。

一、构造函数

  1. HashMap() //无参构造方法
  2. HashMap(int initialCapacity) //指定初始容量的构造方法
  3. HashMap(int initialCapacity, float loadFactor) //指定初始容量和负载因子
  4. HashMap(Map<? extends K,? extends V> m) //指定集合,转化为HashMap

1、无参构造。默认初始化大小,使用默认的初始容量和负载因子

  1. public HashMap() {
  2. this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
  3. }

2、自定义初始容量大小

  1. public HashMap(int initialCapacity) {
  2. // 制定初始容量,负载因子为默认值
  3. this(initialCapacity, DEFAULT_LOAD_FACTOR);
  4. }

3、自定义初始容量和负载因子

对入参的初始容量和负载因子做校验。如果初始容量小于0则抛出异常,如果大于最大值则使用最大值;如果负载因子小于0或为空为NaN则抛异常。

  1. public HashMap(int initialCapacity, float loadFactor) {
  2. if (initialCapacity < 0)
  3. throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity);
  4. if (initialCapacity > MAXIMUM_CAPACITY)
  5. initialCapacity = MAXIMUM_CAPACITY;
  6. if (loadFactor <= 0 || Float.isNaN(loadFactor))
  7. throw new IllegalArgumentException("Illegal load factor: " + loadFactor);
  8. this.loadFactor = loadFactor;
  9. this.threshold = tableSizeFor(initialCapacity);
  10. }

4、指定集合转化为HashMap

  1. public HashMap(Map<? extends K, ? extends V> m) {
  2. // 负载因子使用默认
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/441437
推荐阅读
相关标签
  

闽ICP备14008679号