HashMap
你喜欢炸酱面么
这个作者很懒,什么都没留下…
展开
-
Java 8 HashMap(一)—— 构造方法
一、类属性 //默认容量16 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //最大容量2的30次方 static final int MAXIMUM_CAPACITY = 1 << 30; //默认加载因子0.75 static final float DEFAULT_LOAD_FACTOR = 0.75f; //单个节点上的链表长度大于8时转换为红黑树 sta原创 2021-04-03 22:42:56 · 737 阅读 · 2 评论 -
Java 8 HashMap(二)—— resize()初始化和扩容方法和get()查找方法
废话不多说直接上代码,说明都在代码注释上 final Node<K, V>[] resize() { //获得当前Map的Node数组,此步骤在于不直接对table进行修改 Node<K, V>[] oldTab = table; //获取当前Map的容量 int oldCap = (oldTab == null) ? 0 : oldTab.length; //获取当前Map扩容位置原创 2021-04-03 22:45:50 · 551 阅读 · 2 评论 -
Java 8 HashMap(三)——put()插入方法
直接上代码,说明看注释 @Override public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } Node<K, V> newNode(int hash, K key, V value, Node<K, V> next) { return new Node<>(hash, key, value,原创 2021-04-03 22:48:33 · 425 阅读 · 2 评论 -
Java 8 HashMap(四)——remove删除方法
说明看注释 @Override public V remove(Object key) { //e 当前要移除的节点 Node<K, V> e; //e节点是否为空,空返回null,否则返回e节点的value return (e = removeNode(hash(key), key, null, false, true)) == null ? null : e.value;原创 2021-04-03 22:50:48 · 1119 阅读 · 1 评论 -
Java 8 HashMap(六)——treeifyBin()树化和treeify()方法
说明看注释一、treeifyBin方法 final void treeifyBin(Node<K, V>[] tab, int hash) { //n 数组的长度,index 数组位置 int n, index; Node<K, V> e; if (tab == null || (n = tab.length) < MIN_TREEIFY_CAPACITY) { //如果当前数组为原创 2021-04-03 23:05:20 · 715 阅读 · 0 评论 -
Java 8 HashMap(五)——TreeNode的介绍
一、红黑树的特性(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点二、TreeNode和一些方法static final class TreeNode<K, V> extends LinkedHashMap.Entry<K, V> {原创 2021-04-03 23:05:04 · 3544 阅读 · 0 评论 -
Java 8 HashMap(七)——TreeNode的getTreeNode()方法
说明看注释 /** * 从根结点寻找h和k符合的结点 */ final TreeNode<K, V> getTreeNode(int h, Object k) { return ((parent != null) ? root() : this).find(h, k, null); } /** * 从根结点p开始根据hash和key值寻找指定的结点。kc原创 2021-04-03 23:10:22 · 607 阅读 · 1 评论 -
Java 8 HashMap(八)—— putTreeVal方法和balanceInsertion方法以及左旋和右旋
说明看注释一、putTreeVal方法 final TreeNode<K, V> putTreeVal(HashMap<K, V> map, Node<K, V>[] tab, int h, K k, V v) { //kc key的class Class<?> kc = null; //已搜索 boolean searched = false;原创 2021-04-03 23:14:34 · 379 阅读 · 2 评论 -
Java 8 HashMap(九)——TreeNode的removeTreeNode和balanceDeletion
说明看注释一、removeTreeNode /** * @param movable 处理时,是否移动其他节点 */ final void removeTreeNode(HashMap<K, V> map, Node<K, V>[] tab, boolean movable) { int n; //数组为空直接返回 if (tab == nul原创 2021-04-03 23:17:37 · 802 阅读 · 3 评论 -
Java 8 HashMap(终)——TreeNode的untreeify和split方法
说明看注释一、untreeify final Node<K, V> untreeify(HashMap<K, V> map) { //hd 链表头节点 //tl 链表尾节点 Node<K, V> hd = null, tl = null; //q为当前使用方法的TreeNode,在q节点从Node转为TreeNode之前的链表关系还在,遍历链表原创 2021-04-03 23:20:23 · 709 阅读 · 2 评论 -
Java 8 HashMap全章节跳转
这一章总和一下做个跳转文章地址Java 8 HashMap(一)—— 构造方法Java 8 HashMap(二)—— resize()初始化和扩容方法和get()查找方法Java 8 HashMap(三)——put()插入方法Java 8 HashMap(四)——remove删除方法Java 8 HashMap(五)——TreeNode的介绍Java 8 HashMap(六)——treeifyBin()树化和treeify()方法Java 8 HashMap(七)——TreeNode的ge原创 2021-04-04 11:47:18 · 104 阅读 · 0 评论