java源码解析
文章平均质量分 50
java源码解析
过街的老鼠
耽误太多时间,事情可就做不完了。
展开
-
HashMap源码之get()方法详解
流程: 如果表不为空,则去判断索引位首节点是否为null 判断索引位首节点是否为需要寻找的节点,是则返回该节点 如果不是则去索引位首节点中的链(或树)中继续去寻找 判断索引位首节点是否为树结构,如果是则去红黑树中查找 如果不是则去遍历链表的每个节点,找到后返回,没找到则为空 HashMap并没有直接提供getNode接口给用户调用,而是提供的get函数,而get函数就是通过getNode来取得元素的 public V get(Object key) { Node<原创 2022-04-13 12:00:06 · 1142 阅读 · 0 评论 -
128陷阱源码解析
装箱: 将基本数据类型转化为包装类型。 两种方式 Integer i = new Integer(1); Integer i = Integer.valueOf(1); 拆箱: 将包装类型转换为基本数据类型 int value = i.intValue(); 源码 private static class IntegerCache { static final int low = -128; static final int high; .原创 2022-03-09 10:33:36 · 97 阅读 · 1 评论 -
HashMap源码之put方法详解
HashMap没有直接提供putVal接口给用户调用,而实提供put接口,而他通过putVal来实现插入元素。 public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } /** * * @param hash 指定参数key的哈希值 * @param key 指定参数key * @param value原创 2022-04-12 19:16:39 · 1171 阅读 · 0 评论 -
HashMap源码之扩容(resize)
final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; //计算旧哈希表的容量,如果旧的哈希表为空,则长度返回0,否则返回旧哈希表的长度 int oldCap = (oldTab == null) ? 0 : oldTab.length; //扩容阈值 int oldThr = threshold; //初始化新表的长...原创 2022-04-13 09:47:57 · 821 阅读 · 0 评论