随笔分类 - jdk源码分析
摘要:ArrayList (数组链表)使用Object数组作为存储。 默认构造函数为: 构造一个空的链表,该链表没有进行初始化,在调用其add()方法时,进行了初始化: ensureCapacityInternal()方法是 get()方法:
阅读全文
摘要:1. String是使用char[]数组来存储的,并且String值在创建之后就不可以改变了。char[]数组的定义为: char[]数组value使用final修饰,因此赋值之后就不可以改变了。再看一下String的hashCode()方法的实现就更能说明这一点: 成员变量hash,用来缓存Str
阅读全文
摘要:1、数据结构相关的类,如String、ArrayList,LinkedList,HashMap和ConcurrentHashMap等等。2、线程并发相关的类,如Synchronized、ReentrantLock、ReadWriteLock、AQS和线程池的实现等。
阅读全文
摘要:ConcurrentHashMap (JDK 1.7)的继承关系如下: 1. ConcurrentHashMap是线程安全的hash map。ConcurrentHashMap的数据结构是一个Segment<K, V>数组: 其中,HashEntry的定义如下: 因此,Segment数组的意义就是将
阅读全文
摘要:HashTable继承关系如下: HashTable是一个线程安全的【键-值对】存储结构。其存储结构和HashMap相同,参考这里。 1. HashTable定义了一个类型为Entry<K,V>的数组table用来存储数据。 类型Entry<K,V>的定义如下: 由Entry<K,V>的定义可知,上
阅读全文
摘要:HashSet (jdk 1.7)的继承关系如下: HashSet是使用HashMap实现的一个没有重复元素的集合。HashSet用法如下: 从HashSet的add()方法可以看出,只有一个参数,并没有【键-值对】。 其实是HashSet只使用了HashMap的key,value统一是一个固定的O
阅读全文
摘要:hashmap (jdk 1.7)使用 “数组-链表” 方式进行存储,图形化表示如下: 即,前面是一个数组,后面跟一个链表,那么数据结构这个对应到HashMap的代码里面是什么样子的呢? 在HashMap中定义了一个类型为Entry<K,V>的数组table,上图就是显示了这个table。 类型En
阅读全文
摘要:原因:学习ConcurrentLinkedQueue是看到akka框架的默认邮箱是使用ConcurrentLinkedQueue实现的。 1. ConcurrentLinkedQueue在java.util.concurrent包中(java 版本是1.7.0_71),类间继承关系如下: Concu
阅读全文