
Java集合源码剖析
文章平均质量分 90
咖啡Q伴侣
纸上得来终觉浅,绝知此事要躬行! 代码虐我千百遍,我视代码如初恋!
展开
-
第一篇:JAVA集合之ArrayList源码剖析
ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的Cop原创 2017-08-14 10:11:52 · 557 阅读 · 0 评论 -
Java 集合深入理解(11):LinkedList
今天心情鱼肚白,来学学 LinkedList 吧!日常开发中,保存一组数据使用的最多的就是 ArrayList, 其次就是 LinkedList 了。我们知道 ArrayList 是以数组实现的,遍历时很快,但是插入、删除时都需要移动后面的元素,效率略差些。而LinkedList 是以链表实现的,插入、删除时只需要改变前后两个节点指针指向即可,省事不少。今天转载 2017-08-23 11:44:34 · 279 阅读 · 0 评论 -
Java 集合深入理解(10):Deque 双端队列
什么是 DequeDeque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋壳。Deque 继承自 Queue,直接实现了它的有 LinkedList, ArayDeque, ConcurrentLinkedDeque 等。Deque 支持容量受限的双端队列,也支持大小不固定的。一般双端队列大小不确定。Dequ转载 2017-08-23 11:43:58 · 371 阅读 · 0 评论 -
Java 集合深入理解(9):Queue 队列
今天心情不太好,来学一下 List 吧!什么是队列队列是数据结构中比较重要的一种类型,它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。队列有两种:单队列循环队列单队列就是常见的队列, 每次添加元素时,都是添加到队尾:以数组实现的队列为例,初始时队列长度固定为 4,font 和 rear 均为 0:转载 2017-08-23 11:43:22 · 362 阅读 · 0 评论 -
Java 集合深入理解(8):AbstractSequentialList
今天有点无聊,来学学 AbstractSequentialList 解解闷 吧!AbstractSequentialList 没有什么特别的,这里介绍是为了理解 LinkedList 更容易。什么是 AbstractSequentialList( Sequential 相继的,按次序的)AbstractSequentialList 继承自 Abstrac原创 2017-08-23 11:42:16 · 364 阅读 · 0 评论 -
Java 集合深入理解(7):ArrayList
今天心情有点美丽,学学 ArrayList 放松下吧!什么是 ArrayList ArrayList 是 Java 集合框架中 List接口 的一个实现类。可以说 ArrayList 是我们使用最多的 List 集合,它有以下特点:容量不固定,想放多少放多少(当然有最大阈值,但一般达不到)有序的(元素输出顺序与输入顺序一致)元素可以为 null效率高转载 2017-08-23 11:41:35 · 349 阅读 · 0 评论 -
Java 集合深入理解(6):AbstractList
今天心情比天蓝,来学学 AbstractList 吧!什么是 AbstractListAbstractList 继承自 AbstractCollection 抽象类,实现了 List 接口 ,是 ArrayList 和 AbstractSequentiaList 的父类。它实现了 List 的一些位置相关操作(比如 get,set,add,remov原创 2017-08-23 11:40:24 · 285 阅读 · 0 评论 -
Java 集合深入理解(5):AbstractCollection
今天好累,来学学 AbstractCollection 吧!什么是 AbstractCollectionAbstractCollection 是 Java 集合框架中 Collection 接口 的一个直接实现类, Collection 下的大多数子类都继承 AbstractCollection ,比如 List 的实现类, Set的实现类。 它实现了一转载 2017-08-23 11:38:19 · 364 阅读 · 0 评论 -
Java 集合深入理解(4):List<E> 接口
蓝瘦!香菇! 连着加班几天,醉了。学学 List 放松下!在 Java 集合深入理解:Collection 中我们熟悉了 Java 集合框架的基本概念和优点,也了解了根接口之一的 Collection,这篇文章来加深 Collection 的子接口之一 List 的熟悉。List 接口一个 List 是一个元素有序的、可以重复、可以为 null 的集转载 2017-08-23 11:36:16 · 363 阅读 · 0 评论 -
Java 集合深入理解(3):Collection
什么是集合?集合,或者叫容器,是一个包含多个元素的对象;集合可以对数据进行存储,检索,操作;它们可以把许多个体组织成一个整体: 比如一副扑克牌(许多牌组成的集合);比如一个电话本(许多姓名和号码的映射)。什么是集合框架?集合框架是一个代表、操作集合的统一架构。所有的集合框架都包含以下几点:接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实转载 2017-08-23 11:31:51 · 291 阅读 · 0 评论 -
Java 集合源码解析(2):ListIterator
ListIterator根据官方文档介绍, ListIterator 有以下功能:允许我们向前、向后两个方向遍历 List;在遍历时修改 List 的元素;遍历时获取迭代器当前游标所在位置。注意,迭代器 没有当前所在元素一说,它只有一个游标( cursor )的概念,这个游标总是在元素之间,比如这样:初始时它在第 0 个元素之前,调用 next()转载 2017-08-23 11:28:51 · 342 阅读 · 0 评论 -
Java 集合源码解析(1):Iterator
Java 提供的 集合类都在 Java.utils 包下,其中包含了很多 List, Set, Map, Queue… 它们的关系如下面这张类图所示:可以看到,Java 集合主要分为两类:Collection 和 Map. 而 Collection 又继承了 Iterable 接口,Iterable 接口内只有一个 iterator 方法,返回一个 Iterator 迭代器:p转载 2017-08-23 11:24:20 · 348 阅读 · 0 评论 -
Java 集合深入理解(12):古老的 Vector
今天刮台风,躲屋里看看 Vector !都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这么相似。什么是 VectorVector 和 ArrayList 一样,都是继承自 AbstractList。它是 Stack 的父类。英文的意思是 “矢量”。Vector 成员变量1.底层也是个数组pr转载 2017-08-23 11:45:14 · 247 阅读 · 0 评论 -
Java 集合深入理解(13):Stack 栈
今天心情不错,再来一篇 Stack !数据结构中的 栈数据结构中,栈是一种线性数据结构,遵从 LIFO(后进先出)的操作顺序,所有操作都是在顶部进行有点像羽毛球筒:栈通常有三种操作:push 入栈pop 栈顶元素出栈,并返回peek 获取栈顶元素,并不删除我们自定义一个 栈 时只要实现上述三个主要操作即可,本文中将使用 Java转载 2017-08-23 11:45:56 · 263 阅读 · 0 评论 -
Java 集合深入理解(14):Map 概述
终于把 List 常用的几种容器介绍完了,接下来开始 Map 的相关介绍。什么是 MapJava 中的 Map 接口 是和 Collection 接口 同一等级的集合根接口,它 表示一个键值对 (key-value) 的映射。类似数学中 函数 的概念。数学中的函数:一个 Map 中,任意一个 key 都有唯一确定的 value 与其对应,这个 k转载 2017-08-23 11:46:33 · 261 阅读 · 0 评论 -
第二篇:JAVA集合之LinkedList源码剖析
LinkedList简介 LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。 LinkedList同样是非线程安全的,只在单线程下适合使用。 LinkedList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了Cloneable接口,能被克隆。原创 2017-08-14 10:13:34 · 293 阅读 · 0 评论 -
第三篇:JAVA集合之Vector源码剖析
Vector简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。 Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。 Vector没有丝线Serializable接口,因此它不支持序列化,实现了Cloneable原创 2017-08-14 10:14:47 · 259 阅读 · 0 评论 -
第四篇:JAVA集合之HashMap源码剖析
HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。 HashMap 实现了Serializable接口,因此它支持序原创 2017-08-14 10:16:43 · 360 阅读 · 0 评论 -
第五篇:JAVA集合之Hashtable源码剖析
Hashtable简介 Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。 Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneabl原创 2017-08-14 10:18:35 · 304 阅读 · 0 评论 -
第六篇:JAVA集合之TreeMap源码剖析
红黑树简介 TreeMap是基于红黑树实现的,这里只对红黑树做个简单的介绍,红黑树是一种特殊的二叉排序树,红黑树通过一些限制,使其不会出现二叉树排序树中极端的一边倒的情况,相对二叉排序树而言,这自然提高了查询的效率。 二叉排序树的基本性质如下:原创 2017-08-14 10:21:24 · 281 阅读 · 0 评论 -
第七篇:JAVA集合之LinkedHashmap源码剖析
LinkedHashMap简介 LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashmap的节点一一串成了一个双向循环链表,因此它保留了节点插入的顺序,可以使节点的输出顺序与输入顺序相同。 LinkedHashMap可以用来实现LRU算法(这会在下面的源码中进行分析)。原创 2017-08-14 10:36:22 · 326 阅读 · 0 评论 -
第八篇:JAVA类加载机制源码分析
Java代码首先要编译成class文件字节码,在运行时通过JIT(即时编译器)编译成本地机器码,最后由ClassLoader将其加载解析成Class对象到内存中。通过ClassLoader的loadClass方法的源码加深对Java类加载机制的理解。1. ClassLoader加载机制简述:Java的类加载遵循父类优先的原则,也就是说ClassLoader是一个有层级的原创 2017-08-14 13:38:44 · 969 阅读 · 0 评论 -
Java集合源码剖析汇总
不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!JAVA集合源码剖析Java集合之ArrayList源码剖析Java集合之LinkedList源码剖析Java集合之Vector源码剖析Java集合之HashMap源码剖析Java集合之Hashtable源码剖析Java集合之TreeMap源码剖析Java集合之Li原创 2017-08-24 09:45:41 · 1192 阅读 · 0 评论 -
Java 集合深入理解(17):HashMap 在 JDK 1.8 后新增的红黑树结构
读完本文你将了解到:点击查看 Java 集合框架深入理解 系列 - - 乾杯传统 HashMap 的缺点HashMap 在 JDK 18 中新增的数据结构 红黑树HashMap 中关于红黑树的三个关键参数HashMap 在 JDK 18 中新增的操作桶的树形化 treeifyBinHashMap 在 JDK 18 中新增的操作 红黑树中添加元素 putTreeVal转载 2017-08-23 13:27:44 · 289 阅读 · 0 评论 -
Java 集合深入理解(15):AbstractMap
今天来了解下 AbstractMap。什么是 AbstractMapAbstractMap 是 Map 接口的的实现类之一,也是 HashMap, TreeMap, ConcurrentHashMap 等类的父类。AbstractMap 提供了 Map 的基本实现,使得我们以后要实现一个 Map 不用从头开始,只需要继承 AbstractMap, 然转载 2017-08-23 11:48:30 · 288 阅读 · 0 评论 -
重温数据结构:哈希 哈希函数 哈希表
在学习 HashMap 前,我们先来温习下 Hash(哈希) 的概念。什么是 HashHash(哈希),又称“散列”。散列(hash)英文原意是“混杂”、“拼凑”、“重新表述”的意思。在某种程度上,散列是与排序相反的一种操作,排序是将集合中的元素按照某种方式比如字典顺序排列在一起,而散列通过计算哈希值,打破元素之间原有的关系,使集合中的元素按照散列函数的分类转载 2017-08-23 11:47:32 · 381 阅读 · 0 评论 -
Java 集合深入理解(16):HashMap 主要特点和关键方法源码解读
读完本文你将了解到:点击查看 Java 集合框架深入理解 系列 - - 乾杯什么是 HashMapHashMap 的特点HashMap 的 13 个成员变量HashMap 的初始容量和加载因子HashMap 的关键方法HashMap 的 4 个构造方法HashMap 中的链表节点HashMap 中的添加操作HashMap 中的哈希函数 hashHashMap转载 2017-08-23 13:26:36 · 282 阅读 · 0 评论