随笔分类 - 集合
摘要:前言 在多线程开发中,线程池是个利器,可以帮助我们管理线程和复用线程。而在线程池中,用来保存线程和任务的数据结构就是队列,如newFixedThreadPool和newSingleThreadExecutor这两个线程池使用的LinkedBlockingQueue队列,newCachedThread
阅读全文
摘要:前言 ArrayList可以说是日常开发中最常用到的一个数据结构了,今天我们开始撸一下它的源码。 整体结构 ArrayList的继承关系如下所示: 需要注意到ArrayList实现了RandomAccess这个接口,其源码如下: public interface RandomAccess { } 可
阅读全文
摘要:前言 前面分析了jdk8版本的HashMap,虽然在新版本的jdk中解决了HashMap之前存在的死锁问题,但是该版本的HashMap还是只能用于单线程情况下。多线程环境下还是要使用ConcurrentHashMap来解决并发问题。 ConcurrentHashMap的继承关系如下所示: Concu
阅读全文
摘要:HashSet 日常开发中,如果我们想要过滤重复的元素,通常使用HashSet来实现。HashSet的继承关系如下所示: 成员变量 //底层是由HashMap实现 private transient HashMap<E,Object> map; // 虚拟value private static f
阅读全文
摘要:前言 HashMap作为日常开发中最常使用的一个数据结构了,同时个人也认为这是最重要的一个数据结构,因此涉及到数组、链表、Hash算法、红黑树等等,基本HashMap搞懂了,数据结构这块没啥问题了。 概览 先来总览一下HashMap的继承关系吧 public class HashMap<K,V> e
阅读全文
摘要:前言 在之前的JDK8 ArrayList源码解析P1中提到过,在对ArrayList进行遍历过程中,如果对集合进行结构性修改(增,删),会导致快速失败(fast-fial) 。那什么是fast-fail,什么又是safe-fail呢? fast-fail(快速失败) 在使用for循环遍历一个集合时
阅读全文