java集合
Carey丶zsh
不甘平凡的菜鸟
展开
-
Map (一) HashMap 构造函数的秘密
Map(一)HashMap 构造函数的秘密学习一个类当然要先从构造函数开始学习。因为我们要使用它,要先创造它嘛。而且构造函数中也有大学问哦! 我们都知道 HashMap 的容量值都是 2^n 大小,那它是怎么把你传入的值高效的变为 2^n 呢?这就是我们本次需要探索的问题啦。1. 构造器(构造函数) public HashMap(); public HashM...原创 2018-09-11 11:48:11 · 4067 阅读 · 3 评论 -
Map (二) HashMap put()方法详细解刨
创建 HashMap 我们的即可开始往里面存键值对啦。我们来一步一步的看看 HashMap 是如何存储!我们要模拟一下存储时的多种场景,后场景是在前场景不匹配的情况下的场景(如有遗漏请评论提醒): 我们先理解3个主要参数: * hash (通过 key 计算出的 int 值) * key (传入的 key) * value (传入的 value)我们模拟 ha...原创 2018-09-11 11:57:35 · 834 阅读 · 1 评论 -
Map (三) HashMap 如何利用 hash 计算存储位置
我们在看 HashMap 的源码的时候经常能看到 tab[i = (n - 1) & hash]) 这么一串代码。他是专门用来计算当前 key 存储的位置,并获取当前存储位置的元素,进行后续的判断。让我们用图的形式更直观的看一下它是如何怎么计算的吧。i = 5 即 tab[5]这就是 HashMap 的精华所在,不论是 get() 还是 put() 都是通过上述的方法计算当前位置是...原创 2018-09-18 21:55:24 · 4936 阅读 · 3 评论 -
Map (四) HashMap 已故事的角度理解 resize()
我们先来看一篇故事,有益我们有更好的理解。很久以前有一个学校,有7500名学生(size)和100间教室(oldCap)。学生的学号为0000~7499(hash),教室的编号为0~99 (数组下标)。为了使学生均匀的进入每间教室,校长规定,按学生学号的末尾2位选择对应编号的教室(hash & (数组长度 - 1)),如:学号 0001 进入 01 教室学号 0012 进入 1...原创 2018-09-18 22:11:48 · 510 阅读 · 0 评论 -
Map (五) HashMap get()
首先打开源码: public V get(Object key) { Node<K,V> e; return (e = getNode(hash(key), key)) == null ? null : e.value; }可以看到,get() 主要方法还是调用 getNode() 所以我们重点看一下这个方法: final N...原创 2018-09-27 11:43:13 · 3787 阅读 · 0 评论