HashMap源码主要一些属性

//默认的初始化容量(2的n次方)

static final int default_inital_capacity = 16;

//最大指定容量为2的30次方

static final int maximum_capacity = 1 << 30;

//默认的加载因子

static final float default_load_factor = 0.75f;

//hashmap的底层结构,entry数组

transient Entry[] table;

//存放的key-value对的个数,决定了数组的扩容,默认16 * 0.75 = 12,当size > 12时,就扩容,而非table中

所占用的桶(table[i])个数来决定是否扩容

transient int size;

Entry内部类

 1 static class Entry<K, V> implements Map.Entry<K, V> {
 2         final K key;
 3         V value;
 4         Entry<K, V> next;    // 该Entry的下一个Entry(hash冲突时,形成链表)
 5         final int hash;     // 该Entry的hash值
 6
 7         /**
 8          * Creates new entry.
 9          */
10         Entry(int h, K k, V v, Entry<K, V> n) {
11             value = v;
12             next = n;
13             key = k;
14             hash = h;
15         }
16
17         public final K getKey() {
18             return key;
19         }
20
21         public final V getValue() {
22             return value;
23         }
24
25         //为Entry设置新的value
26         public final V setValue(V newValue) {
27             V oldValue = value;
28             value = newValue;
29             return oldValue;
30         }
31
32         public final boolean equals(Object o) {
33             if (!(o instanceof Map.Entry))
34                 return false;
35             Map.Entry e = (Map.Entry) o;
36             Object k1 = getKey();
37             Object k2 = e.getKey();
38             //在hashmap中可以存放null键和null值
39             if (k1 == k2 || (k1 != null && k1.equals(k2))) {
40                 Object v1 = getValue();
41                 Object v2 = e.getValue();
42                 if (v1 == v2 || (v1 != null && v1.equals(v2)))
43                     return true;
44             }
45             return false;
46         }
47
48         public final int hashCode() {
49             return (key == null ? 0 : key.hashCode())^(value == null ? 0 : value.hashCode());
50         }
51
52         public final String toString() {
53             return getKey() + "=" + getValue();
54         }
55     }

转载于:https://www.cnblogs.com/codechange/p/8541943.html

HashMap源码浅析相关推荐

  1. 【学习笔记-集合】HashMap 源码浅析

    /**  * HashMap主要方法解析,jdk1.7版本的HashMap  * HashMap数据是通过数组和链表结合的方式(链表散列)存储.  * 在put时候根据key值得到hash值(地址)即 ...

  2. hashmap允许null键和值吗_hashMap底层源码浅析

    来源:https://blog.csdn.net/qq_35824590/article/details/111769203 hashmap是我们经常使用的一个工具类.那么知道它的一些原理和特性吗? ...

  3. 【flink】Flink 1.12.2 源码浅析 : Task数据输入

    1.概述 转载:Flink 1.12.2 源码浅析 : Task数据输入 在 Task 中,InputGate 是对输入的封装,InputGate 是和 JobGraph 中 JobEdge 一一对应 ...

  4. 【flink】Flink 1.12.2 源码浅析 : Task 浅析

    1.概述 转载:Flink 1.12.2 源码浅析 : Task 浅析 Task 表示TaskManager上并行 subtask 的一次执行. Task封装了一个Flink operator(也可能 ...

  5. 【Flink】Flink 1.12.2 源码浅析 : TaskExecutor

    1.概述 转载:Flink 1.12.2 源码浅析 : TaskExecutor TaskExecutor 是TaskManger的具体实现. 二 .TaskExecutorGateway TaskE ...

  6. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 JobMasger启动 YarnJobClusterEntrypoint

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [三] 上一章:[flink]Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yar ...

  7. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yarn 提交过程解析

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [二] 请大家看原文去. 接上文Flink 1.12.2 源码分析 : yarn-per-job模式浅析 [一 ...

  8. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 从脚本到主类

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [一] 可以去看原文.这里是补充专栏.请看原文 2. 前言 主要针对yarn-per-job模式进行代码分析. ...

  9. Spring-Web(一) RestTemplate使用与源码浅析

    Spring RestTemplate使用与源码浅析 一.RestTemplate 概述 ​ RestTemplate 是 Spring Web 模块封装的一个基于Rest规范提供HTTP请求服务的工 ...

最新文章

  1. 减肥难?别急,精准调控细菌的方法已横空出世!
  2. 清华姚班陈丹琦获斯隆奖!与去年得主马腾宇是同班同学,博士毕业论文是近十年最热之一...
  3. 第9件事 产品定位要解决的6个问题
  4. 检查联网状态并设置网络
  5. 怎么用python实现回归_Python使用sklearn实现的各种回归算法示例
  6. Eigen入门之密集矩阵 4 - 块操作
  7. c 语言矩阵求逆算法,矩阵的逆 C 语言 算法一
  8. 生成二维码,批量导出带格式的execl
  9. Java使用DFA算法处理敏感词汇
  10. 7z解压软件(小巧好用)。百度云下载链接
  11. 弘扬中国文化创作发展文学建设事业,间谈小说 “文味”和“接笔 ”的看法...
  12. Unity3D U3D安装教程
  13. stm32f107外设晶振8MHZ换成25MHZ 配置系统时钟72MHZ
  14. 【neo4j】去除重复节点
  15. 计算机网络之『路由器的配置』
  16. STM32F103VET6——DAC双通道(PA4、PA5)输出不同电压值,串口可控电压输出的大小
  17. 特征选择过滤法-方差过滤、F检验、互信息法
  18. 不同坐标系BIM模型导出参数配置
  19. JSJ-3/AC220V时间继电器
  20. php brotobuf,用Golang构建gRPC服务

热门文章

  1. 使用azkaban调度spark任务
  2. Quicker--文件搜索工具介绍
  3. 【收藏】nvm的下载,安装与使用(nodejs版本管理)
  4. arthas使用示例:options全局开关
  5. eureka客户端获取服务列表时间间隔配置
  6. Linux traceroute路由跟踪
  7. 第一行代码学习笔记第五章——详解广播机制
  8. Qt QML页面翻转控件封装
  9. 函数指针——typedef函数指针
  10. 计算机考研四大金刚,“四大金刚”考研一个都不少