Java集合库源码解析
xingfeng_coder
路漫漫其修远兮,吾将上下而求索
Gitbook地址:https://xingfeng.gitbook.io/hust
简书地址:https://www.jianshu.com/u/57f41372c68e
展开
-
JDK1.7 HashMap源码分析
JDK1.7中HashMap采用的是数组+链表结构保存所有数据,其结构如下图: 在JDK1.8 HashMap源码分析中已经分析了JDk1.8中HashMap的结构更改,但是和JDk1.7之前的HashMap还是有很多共同点,下面我们着重分析不同点。 构造方法构造方法主要完成出时容量和加载因子的设置,实现如下: public HashMap(int initialCapacity, flo原创 2017-03-12 09:26:14 · 4840 阅读 · 0 评论 -
JDK1.8 HashMap源码分析
HahsMap实现了Map接口。其继承关系如下图: HashMap有两个影响性能的重要参数:初始容量和加载因子。容量是Hash表中桶的个数,当HashMap初始化时,容量就是初始容量。加载因子是衡量hash表多满的一个指标,用来判断是否需要增加容量。当HashMap需要增加容量时,将会导致rehash操作。 默认情况下,0.75的加载因子在时间和空间方面提供了很好的平衡。加载因子越大,增加了原创 2017-02-17 10:56:24 · 2964 阅读 · 0 评论 -
JDK 1.8 Vector与Stack源码分析
Vector类从JDk 1.0开始就存在了,其类的继承关系如下: 从上图可以发现Vector的继承关系与ArrayList的继承关系相同,功能上Vector与ArrayList也是一样的,都是一个扩展的列表。区别在于Vector是线程安全的,而ArrayList不是线程安全的。 Stack类代表的是一个LIFO的栈,该类的继承关系如下: 可以看到Stack继承自Vector类,在Vec原创 2017-02-07 12:16:14 · 1735 阅读 · 0 评论 -
JDK 1.8 LinkedList源码分析
LinkedList是一个实现了List接口和Deque接口的双端链表。 有关索引的操作可能从链表头开始遍历到链表尾部,也可能从尾部遍历到链表头部,这取决于看索引更靠近哪一端。 LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以使用如下方式: List list=Collections.synchronizedList(new LinkedList(...))原创 2017-01-16 12:07:20 · 9130 阅读 · 7 评论 -
JDK 1.8 ArrayList源码分析
ArrayList是一个可动态扩展的列表,底层实现是数组。首先看一下该类的继关系,如下图: 从图中可以看到ArrayList类继承自AbstractList、而AbstractList类又继承自AbstractCollection;另外实现的接口有Collection、List、Cloneable、Serialzable、Iterable和RandomAccess。 这篇博客主要分析一下其主原创 2017-01-13 09:32:35 · 3339 阅读 · 0 评论 -
Java集合库整体类结构
概述Java的集合类均都位于java.util包下,主要分为两大类:一类是Collection,代表一组对象; 一类是Map,代表映射Collection结构Collection类代表一组对象,不关心对象是否重复、是否有序,提供的是基本的操作。根据是否允许重复衍生出Set、List接口,其中Set不允许元素重复,List中的元素可以重复。Queue接口代表了一种FIFO结构。 Set接口又根据是原创 2017-01-09 14:43:46 · 892 阅读 · 0 评论 -
LinkedHashMap源码分析
LinkedHashMap是使用HashMap+LinkedList来实现Map接口。和HashMap的区别在于它维持一个双端链表保存所插入访问的节点。链表定义了迭代顺序,默认情况下顺序就是键值插入到Map的顺序(插入顺序)。 构造方法为LinkedHashMap(int,float,boolean)的可用来创建一个按照访问顺序迭代的LinkedHashMap,按照最少访问到最多访问的顺序链接结点原创 2017-06-29 20:18:47 · 1617 阅读 · 0 评论 -
Hashtable源码分析
Hashtable和HashMap一样,都是一个哈希表,不允许键和值为null,该类是一个线程安全的,每个方法都加了synchronized关键字。下面是该类的继承关系图: 从上图可以看到,Hashtable继承自Dictionary类,而HashMap继承自AbstractMap,所以这两个类的祖宗就是不一样的。这篇文章主要介绍Hashtable和HashMap的异同点。 对于HashM原创 2017-07-26 20:56:45 · 1798 阅读 · 1 评论 -
TreeMap源码分析
TreeMap是NavbagableMap的实现,底层基于红黑树。这个Map按照Comparable将键值排序,或者按照在创建Map时提供的Compartor。 TreeMap的类继承关系图如下: TreeMap与HashMap的一个重要区别是:TreeMap不支持键Comparable与ComparatorComparable接口用于自身与另外一个对象比较,其接口定义如下: public原创 2017-09-04 09:06:21 · 776 阅读 · 0 评论