public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable { private static final long serialVersionUID = 362498820763181265L;

首先它是继承了AbstractMap,这个抽象类里面有很多方法,

  从这个可以看出面向对象的特性,单继承,接口的多实现,

  同时实现了序列号接口,可以进行网络传输,在进行网络传输的时候实体类一般都会实现序列号接口,以便传输,

  在整合redis的时候,如果实体没有进行序列化,是无法传输进入到redis中的value上的

 static final int DEFAULT_INITIAL_CAPACITY =  << ; // aka 16

这个是进行初始化容量的,

 1 << 4

这个是位运算: 二进制为 1   向前唯一四位,那么就是10000  那么换成十进制就是2的4次方 就是16,所以hashmap的初始容量为16,
 static final int MAXIMUM_CAPACITY =  << ;

这个是hashmap的最大容量,表示一个很大的值,大概为2的30次方

  static final float DEFAULT_LOAD_FACTOR = 0.75f;

这个表示hashmap的装载因子

static final int TREEIFY_THRESHOLD = ;

这个是1.8之后特有的,当链表结构到8时就会变成红黑树,

static final int UNTREEIFY_THRESHOLD = ;

由树变成链表的阀值


/**
* The smallest table capacity for which bins may be treeified.
* (Otherwise the table is resized if too many nodes in a bin.)
* Should be at least 4 * TREEIFY_THRESHOLD to avoid conflicts
* between resizing and treeification thresholds.
*/
static final int MIN_TREEIFY_CAPACITY = 64;
 

当桶中的bin被树化时最小的hash表容量。(如果没有达到这个阈值,即hash表容量小于MIN_TREEIFY_CAPACITY,当桶中bin的数量太多时会执行resize扩容操作)这个MIN_TREEIFY_CAPACITY的值至少是TREEIFY_THRESHOLD的4倍。

 static final int hash(Object key) {
int h;
return (key == null) ? : (h = key.hashCode()) ^ (h >>> );
}

在HashMap中,为了更好的性能,我们希望作为Key的对象提供一个合理的hash函数以便能将其合理的分配到桶中。     而在实际的HashMap中,对从对象获取的hash值又做了调整,代码过程的直接翻译就是:如果Key值为null,返回0;如果Key值不为空,返回原hash值和原hash值无符号右移16位的值按位异或的结果。

最新文章

  1. 6 Candy_Leetcode
  2. POJ3281Dining[最大流]
  3. [原]ubuntu14.04 网卡逻辑修改没有文件/etc/udev/rules.d/70-persistent-net.rules
  4. 使用虚幻引擎中的C++导论(二-UE4基类)
  5. nginx是一个反向代理的软件
  6. 电商安全无小事,如何有效地抵御 CSRF 攻击?
  7. [置顶] Spring中DI设置器注入
  8. 【转】android动画之Tween动画 (渐变、缩放、位移、旋转)
  9. 2017多校第9场 HDU 6169 Senior PanⅡ 数论,DP,爆搜
  10. oracle锁表问题解决方法
  11. 【ASP.NET Core】准备工作:在 Windows 10 上配置 Linux 子系统
  12. Linq 巧用 Max,Sum
  13. Java基础知识(JAVA基本数据类型包装类)
  14. hdu2295DLX重复覆盖+二分
  15. Mybatis简介、环境搭建和详解
  16. win10无线网连接 提示无法连接到此网络
  17. 基于FPGA的异步FIFO设计
  18. spring jpa sqls
  19. 重装SQL前,一定要把SQL2005、SQL2008之类的彻底删除干净
  20. 生成并调用so动态库

热门文章

  1. Oracle、SqlServer——基础知识——oracle 与 SqlServer 的区别(未完工)
  2. Shell编程进阶 1.3data命令
  3. 人工智能二之Sublime Text3环境配置
  4. Android 自定义带回调的Dialog 及EditText相关
  5. OpenCV笔记 1
  6. 关于android通过shell修改文件权限的学习
  7. (转载)Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener
  8. dedecms出错此问题:Cannot_modify_header_information_-_headers_already_sent_by_(output_started_at
  9. opencv 基本数据结构
  10. 联想《拯救者》U盘UEFI启动装win7[完美激活](4)