![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码学习
来自流星
这个作者很懒,什么都没留下…
展开
-
Collection学习
package com.song.source.java; import java.util.Iterator; public interface CollectionE> extends IteratorE> { /** * 容器大小 * @return */ int size(); /** * 容器是否为空 * @return */翻译 2018-01-21 15:45:18 · 113 阅读 · 0 评论 -
TreeMap新增节点演化过程
按照 :插入 55 56 57 58 83 ,删除57 ,插入59的顺序建树 55直接插入、染黑就行,56染红,57插入时,出现连续红节点,由于默认null节点是黑色,于是发生左旋 插入58时,又出现连续红色,此时父叔节点都是红色,则仅触发重新着色,不进行旋转,56从红变黑是因为根节点每次调整后都会染黑 插入83时再次需要调整,此时情况和57插入时类似,发生了左旋 57...转载 2019-06-28 09:49:49 · 181 阅读 · 0 评论 -
TreeMap的put方法
TreeMap通过put()和deleteEntry()实现红黑树的增加和删除节点操作 新增节点前提: 需要调整的节点总是红色的 如果插入新节点的父节点是黑色的,无须调整 如果插入新节点的父节点是红色的,因为红黑树规定不能出现相邻的两个红色节点,所以 进入循环判断,或重新着色,或左右旋转,最终达到红黑树的约束条件 退出条件如下: while (x != null &&am...翻译 2019-06-27 14:25:40 · 2620 阅读 · 0 评论 -
CopyOnWriteArrayList
并发容器 CopyOnWriteArrayList 该容器内部会对Iterator进行加锁操作。 COW Copy-On-Write 它是并发的一种思路,实现读写分离,如果是写操作,则复制一个新集合,在新集合内添加和删除元素待一切修改完毕后,将原集合的引用指向新的集合。 使用COW注意点: 1. 尽量设置合理的初始容量,它扩容的代价比较大 ...原创 2019-06-26 11:04:34 · 104 阅读 · 0 评论 -
Hash函数
原作者: 举个栗子你就清楚了。考虑到你已经读过源码,下面一些术语就不详细解释了。 我们创建一个hashmap,其entry数组为默认大小16。 现在有一个key、value的pair需要存储到hashmap里,该key的hashcode是0ABC0000(8个16进制数,共32位),如果不经过hash函数处理这个hashcode,这个pair过会儿转载 2018-02-07 13:59:36 · 213 阅读 · 0 评论 -
HashMap学习
public class HashMapK,V> extends AbstractMapK,V> implements MapK,V>, Cloneable, Serializable { /** * 默认初始化容量大小 */ static final int DEFAULT_INITIAL_CAPACITY = 1 4; /** * 最大的容量 */翻译 2018-02-06 19:14:36 · 118 阅读 · 0 评论 -
ArrayList学习(2)
public boolean addAll(Collectionextends E> c) { // 给定集合转换成Object[]数组 Object[] a = c.toArray(); // 加入数组的长度 int numNew = a.length; // 确保集合容量足够存储 ensureCapacityInternal(size + numNew); //翻译 2018-02-05 19:17:06 · 122 阅读 · 0 评论 -
Java ArrayList的自动扩容机制
ArrayList:本质通过内部维护的数组对象进行数据存储 ①:分析ArrayList的add(E)方法 public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e;转载 2018-02-05 17:10:48 · 978 阅读 · 0 评论 -
TreeMap的get方法
TreeMap的get(Object key): public V get(Object key) { Entry<K,V> p = getEntry(key); return (p==null ? null : p.value); } 根据指定key,比较器比较去寻找指定节点,找不到返回null final Entry&l...翻译 2019-06-28 10:48:40 · 1722 阅读 · 2 评论