容器源码分析
文章平均质量分 76
HryReal
while(!dead) { study(); }
展开
-
容器源码分析之TreeMap(十)
1.TreeMap的结构我们知道,TreeMap的内部实现就是一个红黑树。关于红黑树的介绍,建议大家先看看这里 红黑树的原理和算法详细介绍2.TreeMap的继承关系-3.TreeMap的成员变量public class TreeMapK,V> extends AbstractMapK,V> implements NavigableMapK,V>, Clone原创 2018-01-11 12:29:22 · 250 阅读 · 0 评论 -
容器源码分析之HashTable(八)
1.HashTable的类声明 public class HashtableK,V> extends DictionaryK,V> implements MapK,V>, Cloneable, java.io.Serializable 继承的是Dictionary类,实现了Map、Cloneable、Serializable。注意:这也是Ha原创 2018-01-10 08:52:42 · 212 阅读 · 0 评论 -
容器源码解析之HashMap(七)
再进入源码解析之前,先来看看hashMap的工作原理当我们执行put存值时,hashmap会先调用key的hashcode方法的到哈希码,也就是桶的索引bucketIndex,找到该桶,然后遍历桶用equal方法来比较key,如果桶为空,就把kv放入桶中,如果桶存在该key,就用新value代替旧value,返回旧value,如果不存在就放入桶中,每个桶用单链表维护。下面是原理图: 1.原创 2018-01-10 08:49:14 · 384 阅读 · 0 评论 -
容器源码解析之LinkedHashSet(六)
对于LinkedHashSet而言,它继承与HashSet、又基于LinkedHashMap来实现的。LinkedHashSet底层使用LinkedHashMap来保存所有元素,它继承与HashSet,其所有的方法操作上又与HashSet相同,因此LinkedHashSet 的实现上非常简单,只提供了四个构造方法,并通过传递一个标识参数,调用父类的构造器,底层构造一个LinkedHashMap原创 2018-01-10 08:41:14 · 143 阅读 · 0 评论 -
容器源码分析之TreeSet(五)
HashSet是借助于HashMap的key不允许重复这个特性来实现的。HashMap是操作键值对,而HashSet是操作HashMap的key完成相关操作,TreeSet比HashSet加了排序的功能,那是不是TreeSet也因应该是通过操作TreeMap来实现的呢? right!!先把HashSet的链接发上来,一样的部分就不多解释了: 容器源码分析之HashSet(四)1.Tre原创 2018-01-10 08:40:27 · 197 阅读 · 0 评论 -
容器源码分析之Stack(四)
java.util.Stack是通过继承java.util.Vector来实现的,既然java.util.Vector这个东西已经基本上废弃了,所以java.util.Stack很尴尬,多人用,但是却不是最好的实现。原因很简单,Vector是ArrayList的线程安全版本,Vector也用数组实现,所以说,对于Stack,你觉得用数组还是链表好,当然是链表啦,一看就知道Vector和Stac原创 2018-01-10 08:39:33 · 246 阅读 · 0 评论 -
容器源码分析之LinkedList(三)
LinkedList的构造方法public class LinkedListE> extends AbstractSequentialListE> implements ListE>, DequeE>, Cloneable, java.io.SerializableLinkedList实现了List、Deque接口,说明它有双端队列的特征,同时支持克隆,序列化。我们原创 2018-01-09 11:29:36 · 238 阅读 · 0 评论 -
容器源码分析之PriorityQueue(十)
PriorityQueue的介绍PriorityQueue也叫优先队列,所谓的优先队列其实就是每次从优先队列中取出来的元素要么是最大值,要么是最小值,PriorityQueue是用二叉堆数据结构实现的。在了解PriorityQueue之前,我们最好先吧二叉堆先了解清楚。 可以参考这篇文章:二叉堆 图文解析。PriorityQueue的uml图: 说明:PriorityQu原创 2018-01-15 11:53:56 · 275 阅读 · 0 评论 -
容器源码解析之容器全貌(一)
下面是一个简略的容器继承图 注:兰色为接口,草绿色为抽象类,红色为实现类我将从实现类入手逐个分析容器实现类,来逐渐了解容器全貌Collection容器List容器 VectorStackArrayListLinkedListSet容器 TreeSetHashSetLinkedHashListQueue容器 LinkedListPriorityQueu原创 2018-01-11 13:12:01 · 448 阅读 · 0 评论 -
容器源码分析之ArrayList(二)
ArrayList的类声明首先看一下ArrayList的类声明public class ArrayListE> extends AbstractListE> implements ListE>, RandomAccess, Cloneable, java.io.SerializableArrayList类主要是继承AbstractList类并实现了原创 2018-01-09 09:18:45 · 216 阅读 · 0 评论 -
JUC锁-ReentrantReadWrite(五)
ReadWriteLock 和 ReentrantReadWrite介绍ReadWriteLock,顾名思义,是读写锁。 它维护了一对相关的锁 — — “读取锁”和“写入锁”,一个用于读取操作,另一个用于写入操作。“读取锁”用于只读操作,它是“共享锁”,能同时被多个线程获取。“写入锁”用于写入操作,它是“独占锁”,写入锁只能被一个线程锁获取。这是它的函数列表:// 返回用原创 2018-01-13 14:35:45 · 305 阅读 · 0 评论 -
容器源码分析之HashSet (三)
我们都知道HashSet集合是不允许重复元素的,因此这个类的利用什么来保证这个集合里面不会有重复的元素呢?结论是:HashSet是借助于HashMap的key不允许重复这个特性来实现的。HashMap是操作键值对,而HashSet是操作HashMap的key完成相关操作,或者说,HashSet全部的操作是借助于HashMap经过某种封装得到的。1.HashSet的继承结构 pu原创 2018-01-11 13:11:24 · 215 阅读 · 0 评论 -
容器源码解析之LinkedHashMap(九)
1、LinkedHashMap的继承结构 public class LinkedHashMapK,V> extends HashMapK,V> implements MapK,V>从结构可以看出,LinkedHashMap继承HashMap并实现了Map接口。2、LInkedHashMap构造函数下面几个是LinkedHashMap的构造函转载 2018-01-10 08:55:13 · 164 阅读 · 0 评论