随笔分类 -  hashmap

摘要:1.并发会有什么影响第一:多线程put的时候可能导致元素丢失 考虑在多线程下put操作时,执行addEntry(hash, key, value, i),如果有产生哈希碰撞,导致两个线程得到同样的bucketIndex去存储,就可能会出现覆盖丢失的情况 第二:HashMap在多线程put后可能导致g 阅读全文
posted @ 2020-07-17 10:11 我是张某某 阅读(157) 评论(0) 推荐(0)
摘要:resize()方法-- 用于对HashMap初始化或者扩容。/** * 扩容 * 1.先去找到旧表的容量 * 2.如果容量为0 则取默认值初始化 * 3.如果容量不为0 判断旧表的容量是否超过最大容量 如果超过修改阈值取int最大容量 这样就不会扩容了 * 4.如果当前容量超过表的默认容量,并且扩 阅读全文
posted @ 2020-07-17 09:59 我是张某某 阅读(399) 评论(0) 推荐(0)
摘要:红黑树,本质上来说是一颗二叉搜索树。二叉代表它的节点最多有两个子节点,而且左右有顺序,不能颠倒,分别叫左孩子和右孩子,这两个节点互为兄弟节点,而红黑树,就跟它的名字一样,又红又黑,红黑并进,理实交融,节点是非红即黑的,看起来就像这样 红黑树的主要特性: (1)每个节点要么是黑色,要么是红色。(节点非 阅读全文
posted @ 2020-07-17 09:58 我是张某某 阅读(638) 评论(0) 推荐(0)
摘要:先假定ConcurrentHashMap也可以存放value为null的值。那不管是HashMap还是ConcurrentHashMap调用map.get(key)的时候,如果返回了null,那么这个null,都有两重含义: **1.这个key从来没有在map中映射过。 **2.这个key的valu 阅读全文
posted @ 2020-05-28 10:40 我是张某某 阅读(3710) 评论(0) 推荐(1)
摘要:HashMapJDK1.8 hash算法: static final int hash(Object key) { int h; //key的hash值高16位不变,低16位与高16位异或作为key的最终hash值 //(h >>> 16,表示无符号右移16位,高位补0,任何数跟0异或都是其本身,因 阅读全文
posted @ 2020-05-25 10:54 我是张某某 阅读(716) 评论(0) 推荐(0)
摘要:注意一点:put时候去扩容 一是需要判断table是否为null 不为null的情况 去扩容 一是要达到阈值 而是要table长度要大于16 1.put(方法): //计算key值的hash 然后去做put public V put(K key, V value) { return putVal(h 阅读全文
posted @ 2020-05-25 10:52 我是张某某 阅读(356) 评论(0) 推荐(0)