Java集合框架(四)-HashMap

打印 上一主题 下一主题

主题 869|帖子 869|积分 2607

大佬的理解->Java集合值HashMap 
1、HashMap特点

存放的元素都是键值对(key-value),key是唯一的,value是可以重复的存放的元素也不保证添加的顺序,即是无序的存放的元素的键可以为null,但是只能有一个key为null,可以有多个value为null(前提是存放的是HasHap对象)如果新添加的元素的键(key)在集合中已经存在,自动将新添加的值覆盖到原有的值2、底层实现

HashMap的底层使用的是Node对象数组;
HashMap源码
  1. transient Node<K,V>[] table; //Node对象数组
  2. //Node类
  3. static class Node<K,V> implements Map.Entry<K,V> {
  4.         final int hash;
  5.         final K key;
  6.         V value;
  7.         Node<K,V> next;
  8.         ......
  9. }
复制代码
3、扩容


  • HashMap的底层使用的是Node对象数组,初始容量(未自定义)是16,根据负载因子跟数组容量,计算出扩容临界值,每当存放元素达到了临界值就可以扩容,而不是等到数组长度不够;
  • 每次扩容,都是原有数组容量的2倍,必须要保证是2的整数次幂(底层算法实现),最大容量是2的30次方;
初始容量和默认扩容因子
  1. /**
  2. * Constructs an empty <tt>HashMap</tt> with the default initial capacity
  3. * (16) and the default load factor (0.75).
  4. */
  5. //初始容量为16
  6. static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
  7. //默认扩容因子为0.75
  8. static final float DEFAULT_LOAD_FACTOR = 0.75f;
  9. //最大容量是2的30次方
  10. static final int MAXIMUM_CAPACITY = 1 << 30;
  11. public HashMap() {
  12.     this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
  13. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

八卦阵

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表