项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.HashMap的基础结构

在1.7中,HashMap 底层是基于 数组 + 链表的结构组成。在1.8中,如果链表的长度大于一定的值,链表会转成红黑树。

2.HashMap的参数(1.8)

    /*** The default initial capacity - MUST be a power of two.*/static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/*** The maximum capacity, used if a higher value is implicitly specified* by either of the constructors with arguments.* MUST be a power of two <= 1<<30.*/static final int MAXIMUM_CAPACITY = 1 << 30;/*** The load factor used when none specified in constructor.*/static final float DEFAULT_LOAD_FACTOR = 0.75f;/*** The bin count threshold for using a tree rather than list for a* bin.  Bins are converted to trees when adding an element to a* bin with at least this many nodes. The value must be greater* than 2 and should be at least 8 to mesh with assumptions in* tree removal about conversion back to plain bins upon* shrinkage.*/static final int TREEIFY_THRESHOLD = 8;/*** The bin count threshold for untreeifying a (split) bin during a* resize operation. Should be less than TREEIFY_THRESHOLD, and at* most 6 to mesh with shrinkage detection under removal.*/static final int UNTREEIFY_THRESHOLD = 6;/*** 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;
.../*** The number of key-value mappings contained in this map.*/transient int size;.../*** The next size value at which to resize (capacity * load factor).** @serial*/// (The javadoc description is true upon serialization.// Additionally, if the table array has not been allocated, this// field holds the initial array capacity, or zero signifying// DEFAULT_INITIAL_CAPACITY.)int threshold;

DEFAULT_INITIAL_CAPACITY:16,数组的初始值,没太多好解释的。
MAXIMUM_CAPACITY:最大值,基本上不会达到这个值。
DEFAULT_LOAD_FACTOR:size / capacity(DEFAULT_INITIAL_CAPACITY)
threshold: capacity * load factor,超过这个阈值会rehash。

//一个桶的树化阈值
//当桶中元素个数超过这个值时,需要使用红黑树节点替换链表节点
//这个值必须为 8,要不然频繁转换效率也不高
static final int TREEIFY_THRESHOLD = 8;

//一个树的链表还原阈值
//当扩容时,桶中元素个数小于这个值,就会把树形的桶元素 还原(切分)为链表结构
//这个值应该比上面那个小,至少为 6,避免频繁转换
static final int UNTREEIFY_THRESHOLD = 6;

//哈希表的最小树形化容量
//当哈希表中的容量大于这个值时,表中的桶才能进行树形化
//否则桶内元素太多时会扩容,而不是树形化
//为了避免进行扩容、树形化选择的冲突,这个值不能小于 4 * TREEIFY_THRESHOLD
static final int MIN_TREEIFY_CAPACITY = 64;

3.HashMap中DEFAULT_LOAD_FACTOR为什么是0.75

如果该值设为0.5,会在hashmap容量达到一半时候就扩容。比如从16扩大32,从32到64,64到128,浪费的空间会越来越大。
而如果该值设置为1,则每次空间使用完毕才会扩容,put时候操作耗时会增加。
所以0.75是时间与空间的一个平衡。

4.put时候操作

1.7插入元素到单链表中采用头插入法,1.8采用的是尾插入法

5.HashMap死循环

HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构。

HashMap简单小结相关推荐

  1. JVM&NIO&HashMap简单问

    JVM&NIO&HashMap简单问 背景:前几天在网上看到关于JVM&NIO&HashMap的一些连环炮的面试题,整理下以备不时之需. 一.JVM Java的虚拟机的 ...

  2. 计算机组装与维护手写笔记,科学网—计算机技术的简单小结 - 熊伟的博文

    我的博客已经搬家到 xiongbox.com  欢迎访问熊伟博士的网站! 1.计算机技术是指计算机领域中所运用的技术方法和技术手段.计算机技术具有明显的综合特性,它与电子工程.应用物理.机械工程.现代 ...

  3. 后端基础入门技术栈简单小结(非常简单)

    后端基础入门技术栈简单小结(非常简单) 本文章同步更新于: 简书:https://www.jianshu.com/p/c8c6f10850e2 CSDN:https://blog.csdn.net/Z ...

  4. Comparator简单小结

    Comparator 简单小结 一般Java中通过接口实现两个对象的比较,比较常用就是Comparable接口和Comparator接口 两者区别 Comparator位于包java.util下,而C ...

  5. RMI-IIOP与JNDI简单小结

    Java RMI-IIOP(java remote method invocation over the internet inter-ORB protocol),如果使用过RMI,就应该很清除RMI ...

  6. 信用评分的简单小结(ROC,IV,WOE)

    转自:http://chen.yi.bo.blog.163.com/blog/static/150621109201011115616880/ 由于专业的关系,我学习信用评分的时候往往最关注模型那一块 ...

  7. python小结_python简单小结

    笔者对于python常用的语法知识做了小结,不是很全面,希望能给各位带来帮助. 1.同一级代码的缩进必须保持一致,需要缩进的位置使用":" 2.raw_input函数 eg:nam ...

  8. 藏地传奇真言专题简单小结

    先来个传送门:藏地传奇-真言专题.话说搞这个专题也折腾了不少时间,看似简单的页面,实际也隐藏着大大小小的坑.下面请听我一一道来. 一.先从布局说起 真言专题页采用的布局是屡见不鲜的瀑布流.其实当时一接 ...

  9. 【python】查看图像位深度,以及改变图像位深度的简单小结

    every blog every motto: Just live your life cause we don't live twice. 0. 前言 关于图像位深度,色深的小结 说明: 有不对的地 ...

  10. SQL注入常见绕过简单小结

    文章目录 1. 更改提交方式 2. 垃圾数据绕过 3. 双写绕过 4. HTTP参数绕过 5. 编码绕过 6. 大小写绕过 7. 等价函数 8. 其他 1. 更改提交方式 ?id=1 and 1=2 ...

最新文章

  1. 灯三段调光原理_球泡灯中国能效标识怎么做,GB30255中国能效报告办理要求
  2. PoseFormer:首个纯基于Transformer的 3D 人体姿态估计网络,性能达到 SOTA
  3. 开发者 AI 转型指南
  4. Android图片特效处理之图片叠加
  5. VBoxManage: error: Failed to create the host-only
  6. MyBatis入门基础(一)
  7. 带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动
  8. 前端:JS/24/BOM和DOM简介,for...in循环遍历,window对象的属性和方法,延时器,定时器,screen屏幕对象,location地址栏对象,history历史记录对象
  9. 手机电脑壁纸!让你的桌面变得超酷
  10. Windows10 Kafka Docker 集群搭建
  11. 深入浅出JMS(一)——JMS简要
  12. 阶段3 2.Spring_07.银行转账案例_2 案例中添加转账方法并演示事务问题
  13. 【嵌入式模块】DS1302 时钟定时芯片
  14. ES6,ES5,ES3,对比学习~
  15. python修改误差棒的样式_matplotlib可视化番外篇bar()--带误差棒的柱状图
  16. 离开后再回原来的公司合适吗?
  17. 百度token怎么获取_【专栏精选】实战:百度语音识别
  18. Tensorflow
  19. jiffies与HZ、定时器、原子操作
  20. 计算机网络 - 网络层

热门文章

  1. Spring的 @ExceptionHandler注解无效问题
  2. 实战篇:如何用Keras建立神经网络(附全部代码) 1
  3. 从雅迪赞助FIFA世界杯透视体育营销趋势
  4. Ubuntu 14.04安装LAMP(Linux,Apache,MySQL,PHP)
  5. Zim学习笔记 (Fedora)
  6. virtualenv 安装及使用[转]
  7. win7域用户生成临时文件夹
  8. 如何找到稳定的网站空间
  9. 很全的WebGL教程
  10. Java练习 SDUT-1294_选票统计