
jdk源码
不会程序的JAVA程序媛
I'm willing to do anything but ordinary
展开
-
HashMap进行put操作会引起死循环?
HashMap进行put操作会引起死循环?最近在磕《java并发编程艺术》,在看到第六章的时候出现了下面这段我不是很理解的东西,如下《java并发编程艺术》截取为什么要使用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。1. 线程不安全的HashMap在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%原创 2020-07-03 13:22:33 · 6270 阅读 · 4 评论 -
JDK1.8 HashMap源码研读
HashMap源码研读文章目录HashMap源码研读前面注释翻译和理解属性Node子类Static utilitieshash(Object key)comparableClassFor(Object x)compareComparables(Class<?> kc, Object k, Object x)tableSizeFor(int cap)tableSizeFor解析Public operations构造器putMapEntries(Map<? extends K, ? exte原创 2020-06-08 18:14:17 · 1728 阅读 · 0 评论 -
HashMap中的compute (),merge (),putIfAbsent (),computeIfPresent (),computeIfAbsent()的区别和用法
HashMap中的compute (),putIfAbsent (),computeIfPresent (),computeIfAbsent()的区别和用法测试代码 @Test public void test1 () { HashMap<String, Integer> map = new HashMap<> (); HashMap<String, Integer> map1 = new HashMap<> ()原创 2020-06-08 17:41:26 · 1463 阅读 · 0 评论 -
HashMap源码研读之putVal()和resize()
putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) /** * Implements Map.put and related methods * 实现Map.put和相关方法 * @param hash hash for key 键的哈希值 * @param key the key 键 * @param value the value to put 值原创 2020-06-08 14:46:41 · 1189 阅读 · 0 评论 -
容器中迭代器的fail-fast机制
容器中迭代器的fail-fast机制研究过ArrayList或HashMap源码的朋友就会发现,这两个类中都提到了fail-fast机制fail-fast机制理解ArrayList或HashMap集合在迭代时,机制如果有其他线程在修改,会触发迭代器的fail-fast,从而抛ConcurrentModificationException。fail-fast机制实现原理ArrayList或HashMap(一些是非线程安全的集合类)都是通过modCount字段来记录ArrayList或HashM原创 2020-06-07 15:32:53 · 1249 阅读 · 0 评论 -
ArrayList源码研读
ArrayList源码研读文章目录ArrayList源码研读属性构造器public ArrayList (int initialCapacity)public ArrayList ()public ArrayList (Collection<? extends E> c)容量削减public void trimToSize ()扩容ensureCapacity (int minCapacity)calculateCapacity (Object[] elementData, int minCa原创 2020-06-04 23:22:02 · 1191 阅读 · 0 评论 -
ArrayList源码研读
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable /* * (序列化(Serializable接口) * * 含义:将一个对象的状态(各个属性值)保存起来,然后在适当的时候再获得 * .原创 2020-05-19 23:36:27 · 1091 阅读 · 0 评论 -
HashMap中为什么用hash(Object key)
HashMap中为什么用hash(Object key)为什么不直接用hahCode方法而是重新定义一个hash()方法,且使用(h = key.hashCode()) ^ (h >>> 16)运算呢根据注释得出计算key.hashCode()并将哈希值的较高位散列值与低位异或。因为该表使用2的幂掩码,所以仅在当前掩码之上的位数变化的散列集将始终冲突。(已知的例子包括在...原创 2020-04-15 00:23:57 · 1624 阅读 · 0 评论