HashMap
HashMap
眉头
chase
展开
-
HashMap源码(七) —— 红黑树删除原理分析 动态图解析!!!
红黑书的删除本质上是一个穷举的过程删除情况说明删除的节点没有子节点的情况a) 如果为红色,直接删除即可,不会影响黑色节点的数量b) 如果为黑色,删除的时候需要进行平衡操作删除的节点只有一个子节点时,删除节点只能是黑色,子节点也只能是红色。否则无法满足红黑树黑色节点完全平衡的特性(从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点)如果删除节点有两个子节点时,使用后继节点作为替换的删除节点,然后再按照前面两种情况处理删除情况具体分析1. 删除的节点没有子节点(非null节点)的情原创 2020-06-03 11:21:41 · 2250 阅读 · 7 评论 -
HashMap源码(六) —— 扩容 resize(),和获取 get()
sdf原创 2020-06-01 18:21:22 · 1293 阅读 · 0 评论 -
HashMap源码(五) —— 底层红黑树原理解析 (新增、删除)动图分析!!!
满足红黑书结构原则:1、每个节点只能是红色或者黑色2、根节点都是黑色3、不可能有连在一起的红色节点4、每个红色节点的两个字节点都是黑色,原创 2020-06-01 18:20:17 · 2469 阅读 · 0 评论 -
HashMap源码(四) —— hashMap 之 put方法详解
//入口方法public V put(K key, V value) { return putVal(hash(key), key, value, false, true);}入口方法中只调用了一个putVal方法,在调用这个方法之前,调用了hash(key)这个方法,具体源码如下:/**说明,当key为null时返回的hash值为0,是固定的,也说明了hashmap中允许且只有一个为null的key 而在hashTable中,不允许有null的key存在,所以没有key==原创 2020-05-28 19:38:49 · 1090 阅读 · 0 评论 -
HashMap源码(三) —— 成员变量解释和构造方法细节分析
HashMap数组容量,默认是16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; HashMap最大容量:230static final int MAXIMUM_CAPACITY = 1 << 30;负载因子,也叫加载因子static final float DEFAULT_LOAD_FACTOR = 0.75f;作用:影响着hashMap扩容的因素如:默认容量是16,保存的容量超过 16*0.5..原创 2020-05-27 18:40:09 · 1027 阅读 · 0 评论 -
HashMap源码(二) —— 成员变量 DEFAULT_INITIAL_CAPACITY 为什么是2的n次方???
// 默认容量 16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //16为什么必须是2的n次幂 因为只有是2n,才可以通过 hash & (leng-1) 计算出的索引尽可能保证数据分布均匀. 如果不是2的n次幂,计算出的索引特别容易相同,很容易发生hash碰撞,导致其余数组空间很大程度上没有存储数据,链表或者红黑树过长,效率较低. 说明:为什么是2的n次方?2n的二进制是一个首位是1 后面为是0的数,如 23原创 2020-05-27 13:31:05 · 2403 阅读 · 0 评论 -
HashMap源码(一) —— 数据结构、put存储过程介绍
HashMap 数据结构Jdk1.8之前:数组+链表Jdk 1.8之后 数组+链表+红黑书链表长度大于8后并且数组长度 大于64 链表结构转化成红黑树结构put方法图解HashMap map = new HashMap<>() 的执行过程jdk8之前: 构造方法中创建了一个长度是16的Entry[] table 用来存储键值对数据。jdk8之后: 不在构造方法中创建,在第一次put方法时创建的 Node[] table 来保存数据。调用put 时保存数据的过程pu原创 2020-05-27 11:25:54 · 1231 阅读 · 1 评论 -
Collection 集合 及 Map 总结
Collection:各自的原理、特点及区别都在图中有相应的体现。Map:1)、HashMap是基于哈希表的Map接口的非同步实现。在JAVA编程中,最基本的结构就是两种。一个是数组,另一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表数组”的数据结构,每个元素存放链表节点的数组,即数组和链表的结合体。Ha...原创 2018-08-26 23:35:35 · 1238 阅读 · 0 评论