jdk源码分析
股海孙悟空
wx 公众号 股海孙悟空
展开
-
java源码分析之TreeMap基础篇
常见的数据结构有数组、链表,还有一种结构也很常见,那就是树。前面介绍的集合类有基于数组的ArrayList,有基于链表的LinkedList,还有链表和数组结合的HashMap,今天介绍基于树的TreeMap。 TreeMap基于红黑树(点击查看树、红黑树相关内容)实现。查看“键”或“键值对”时,它们会被排序(次序由Comparable或Comparator决定)。TreeMap的原创 2017-09-13 09:06:58 · 256 阅读 · 0 评论 -
重温数据结构:深入理解红黑树
读完本文你将了解到:什么是红黑树黑色高度红黑树的 5 个特性红黑树的左旋右旋指定节点 x 的左旋 右图转成左图指定节点 y 的右旋左图转成右图红黑树的平衡插入二叉查找树的插入插入后调整红黑树结构调整思想插入染红后的调整有 2 种情况根据 TreeMap 的代码来验证这个过程红黑树的平衡删除转载 2017-09-13 14:47:20 · 335 阅读 · 0 评论 -
重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
什么是二叉树 Binary Tree先来个定义:二叉树是有限个节点的集合,这个集合可以是空集,也可以是一个根节点和至多两个子二叉树组成的集合,其中一颗树叫做根的左子树,另一棵叫做根的右子树。简单地说,二叉树是每个节点至多有两个子树的树,下面的家谱就是一个形象的二叉树:二叉树的定义是一个递归的定义,其中值得注意的是左右子树的概念,因为有左、右之分,下面转载 2017-10-25 19:11:19 · 232 阅读 · 0 评论 -
Java 集合深入理解(11):LinkedList
我们知道 ArrayList 是以数组实现的,遍历时很快,但是插入、删除时都需要移动后面的元素,效率略差些。而LinkedList 是以链表实现的,插入、删除时只需要改变前后两个节点指针指向即可,省事不少。今天来看下 LinkedList 源码。#LinkedList 继承结构LinkedList 继承自 AbstractSequentialList转载 2017-10-26 09:54:37 · 241 阅读 · 0 评论 -
Java 集合深入理解(5):AbstractCollection
什么是 AbstractCollectionAbstractCollection 是 Java 集合框架中 Collection 接口 的一个直接实现类, Collection 下的大多数子类都继承 AbstractCollection ,比如 List 的实现类, Set的实现类。 它实现了一些方法,也定义了几个抽象方法留给子类实现,因此它是一个抽象类。抽象方法转载 2017-10-26 10:26:31 · 249 阅读 · 0 评论 -
Java 集合深入理解(3):Collection
什么是集合?集合,或者叫容器,是一个包含多个元素的对象;集合可以对数据进行存储,检索,操作;它们可以把许多个体组织成一个整体: 比如一副扑克牌(许多牌组成的集合);比如一个电话本(许多姓名和号码的映射)。什么是集合框架?集合框架是一个代表、操作集合的统一架构。所有的集合框架都包含以下几点:接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实转载 2017-10-26 10:01:52 · 348 阅读 · 0 评论 -
Java 集合源码解析(2):ListIterator
ListIterator根据官方文档介绍, ListIterator 有以下功能:允许我们向前、向后两个方向遍历 List;在遍历时修改 List 的元素;遍历时获取迭代器当前游标所在位置。注意,迭代器 没有当前所在元素一说,它只有一个游标( cursor )的概念,这个游标总是在元素之间,比如这样:初始时它在第 0 个元素之前,调用 next()转载 2017-09-18 14:35:26 · 568 阅读 · 0 评论 -
Java 集合深入理解(4):List<E> 接口
在 Java 集合深入理解:Collection 中我们熟悉了 Java 集合框架的基本概念和优点,也了解了根接口之一的 Collection,这篇文章来加深 Collection 的子接口之一List 的熟悉。List 接口一个 List 是一个元素有序的、可以重复、可以为 null 的集合(有时候我们也叫它“序列”)。Java 集合框架中最常使用的几种 Li转载 2017-10-26 10:07:26 · 358 阅读 · 0 评论 -
Java 集合深入理解(6):AbstractList
什么是 AbstractListAbstractList 继承自 AbstractCollection 抽象类,实现了 List 接口 ,是 ArrayList 和 AbstractSequentiaList 的父类。它实现了 List 的一些位置相关操作(比如 get,set,add,remove),是第一个实现随机访问方法的集合类,但不支持添加和替换。在 A转载 2017-10-26 11:31:32 · 337 阅读 · 0 评论 -
Java 集合深入理解(7):ArrayList
什么是 ArrayList ArrayList 是 Java 集合框架中 List接口 的一个实现类。可以说 ArrayList 是我们使用最多的 List 集合,它有以下特点:容量不固定,想放多少放多少(当然有最大阈值,但一般达不到)有序的(元素输出顺序与输入顺序一致)元素可以为 null效率高 size(), isEmpty(), get(), se转载 2017-10-26 09:55:30 · 179 阅读 · 0 评论 -
System.arraycopy()方法详解
一、深度复制和浅度复制的区别 Java数组的复制操作可以分为深度复制和浅度复制,简单来说深度复制,可以将对象的值和对象的内容复制;浅复制是指对对象引用的复制。二、System.arraycopy()方法实现复制1、System中提供了一个native静态方法arraycopy(),可以使用这个方法来实现数组之间的复制。对于一维数组来说,这种复制属性值传递原创 2017-10-26 18:39:17 · 149481 阅读 · 8 评论 -
Java 集合深入理解(12):古老的 Vector
都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这么相似。什么是 VectorVector 和 ArrayList 一样,都是继承自 AbstractList。它是 Stack 的父类。英文的意思是 “矢量”。Vector 成员变量1.底层也是个数组protected Object[] elementDa转载 2017-10-31 09:54:16 · 210 阅读 · 0 评论 -
Java 集合深入理解(13):Stack 栈
数据结构中的 栈数据结构中,栈是一种线性数据结构,遵从 LIFO(后进先出)的操作顺序,所有操作都是在顶部进行有点像羽毛球筒:栈通常有三种操作:push 入栈pop 栈顶元素出栈,并返回peek 获取栈顶元素,并不删除我们自定义一个 栈 时只要实现上述三个主要操作即可,本文中将使用 Java 中的 LinkedList 实现一个栈。栈转载 2017-09-18 14:46:28 · 781 阅读 · 0 评论 -
重温数据结构:二叉排序树的查找、插入、删除
现在我们来介绍二叉树的一种特殊形式 — 二叉排序树,了解它的区分策略及常用操作。什么是二叉排序树 Binary Sort Tree, BST二叉排序树,又称二叉查找树、二叉搜索树、B树。二叉排序树是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;左、右子树也分别为二叉排序转载 2017-10-25 19:12:50 · 300 阅读 · 0 评论 -
重温数据结构:树 及 Java 实现
数据结构,指的是数据的存储形式,常见的有线性结构(数组、链表,队列、栈),还有非线性结构(树、图等)。今天我们来学习下数据结构中的 树。什么是树线性结构中,一个节点至多只有一个头节点,至多只有一个尾节点,彼此连接起来是一条完整的线。比如链表和数组:而树,非线性结构的典型例子,不再是一对一,而变成了一对多(而图则可以是 多对多),如下图所示:转载 2017-10-25 19:10:30 · 231 阅读 · 0 评论 -
Java 集合深入理解(16):HashMap 主要特点和关键方法源码解读
读完本文你将了解到:点击查看 Java 集合框架深入理解 系列 - - 乾杯什么是 HashMapHashMap 的特点HashMap 的 13 个成员变量HashMap 的初始容量和加载因子HashMap 的关键方法HashMap 的 4 个构造方法HashMap 中的链表节点HashMap 中的添加操作HashMap 中的哈希函数 hashHashMap转载 2017-09-14 10:55:33 · 571 阅读 · 0 评论 -
探索 ConcurrentHashMap 高并发性的实现机制
简介ConcurrentHashMap 是 util.concurrent 包的重要成员。本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制。由于 ConcurrentHashMap 的源代码实现依赖于 Java 内存模型,所以阅读本文需要读者了解 Java 内存模型。同时,ConcurrentHashMap 的源代原创 2017-09-13 09:23:04 · 216 阅读 · 0 评论 -
Java 集合深入理解(17):HashMap 在 JDK 1.8 后新增的红黑树结构
点击查看 Java 集合框架深入理解 系列 传统 HashMap 的缺点HashMap 在 JDK 18 中新增的数据结构 红黑树HashMap 中关于红黑树的三个关键参数HashMap 在 JDK 18 中新增的操作桶的树形化 treeifyBinHashMap 在 JDK 18 中新增的操作 红黑树中添加元素 putTreeValHashMa转载 2017-09-13 14:43:03 · 446 阅读 · 0 评论 -
Java 集合深入理解(15):AbstractMap
今天来了解下 AbstractMap。什么是 AbstractMapAbstractMap 是 Map 接口的的实现类之一,也是 HashMap, TreeMap, ConcurrentHashMap 等类的父类。AbstractMap 提供了 Map 的基本实现,使得我们以后要实现一个 Map 不用从头开始,只需要继承 AbstractMap, 然转载 2017-09-14 11:00:27 · 227 阅读 · 0 评论 -
AtomicInteger源码
Atomic原子类,可以对相应的操作执行原子操作。主要分为以下几种: 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ; 2. 数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ; 3. 引用类型: AtomicReference, AtomicStampe原创 2017-09-18 14:29:58 · 386 阅读 · 0 评论 -
ThreadPoolExecutor源码
java.util.concurrent.ThreadPoolExecutor extends AbstractExecutorService1ThreadPoolExecutor类称为线程池。AbstractExecutorService是一个抽象类,它实现了ExecutorService接口 1.类变量&常量//ctl是一个AtomicInteger类型的原子对象。ctl记录了原创 2017-09-18 14:58:53 · 455 阅读 · 0 评论 -
AbstractQueueSynchronizer源码
abstract class java.util.concurrent.locks.AbstarctQueueSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable12AbstractQueueSynchronizer,简称AQS,是所有的锁类,如ReentrantLock、R原创 2017-09-18 15:01:08 · 453 阅读 · 0 评论 -
ConcurrentHashMap源码
java.util.concurrent.ConcurrentHashMapConcurrentHashMapK,V> extends AbstractMapK,V> implements ConcurrentMapK,V>, Serializable {123设计首要目的:维护并发可读性(get、迭代相关);次要目的:使空间消耗比HashMap相同或更好,且支持多线程高效率的初原创 2017-09-18 15:02:16 · 391 阅读 · 0 评论 -
Java 集合深入理解(7):ArrayList
什么是 ArrayList ArrayList 是 Java 集合框架中 List接口 的一个实现类。可以说 ArrayList 是我们使用最多的 List 集合,它有以下特点:容量不固定,想放多少放多少(当然有最大阈值,但一般达不到)有序的(元素输出顺序与输入顺序一致)元素可以为 null效率高 size(), isEmpty(), get(), se转载 2017-10-31 09:01:26 · 295 阅读 · 0 评论 -
Java 集合深入理解(8):AbstractSequentialList
AbstractSequentialList 没有什么特别的,这里介绍是为了理解 LinkedList 更容易。什么是 AbstractSequentialList( Sequential 相继的,按次序的)AbstractSequentialList 继承自 AbstractList,是 LinkedList 的父类,是 List 接口 的简化版实现。转载 2017-10-31 09:28:11 · 1775 阅读 · 0 评论 -
Java 集合深入理解(9):Queue 队列
什么是队列队列是数据结构中比较重要的一种类型,它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。队列有两种:单队列循环队列单队列就是常见的队列, 每次添加元素时,都是添加到队尾:以数组实现的队列为例,初始时队列长度固定为 4,font 和 rear 均为 0:每添加一个元素,rear 后移一位。当添加四个转载 2017-09-18 14:51:35 · 519 阅读 · 0 评论 -
重温数据结构:哈希 哈希函数 哈希表
什么是 HashHash(哈希),又称“散列”。散列(hash)英文原意是“混杂”、“拼凑”、“重新表述”的意思。在某种程度上,散列是与排序相反的一种操作,排序是将集合中的元素按照某种方式比如字典顺序排列在一起,而散列通过计算哈希值,打破元素之间原有的关系,使集合中的元素按照散列函数的分类进行排列。在介绍一些集合时,我们总强调需要重写某个类的 equlas() 方法转载 2017-10-31 09:50:36 · 318 阅读 · 0 评论 -
Java 集合深入理解(14):Map 概述
什么是 MapJava 中的 Map 接口 是和 Collection 接口 同一等级的集合根接口,它 表示一个键值对 (key-value) 的映射。类似数学中 函数 的概念。数学中的函数:一个 Map 中,任意一个 key 都有唯一确定的 value 与其对应,这个 key-value 的映射就是 map。Map 中元素的顺序取决于迭代器迭代时的顺序,有转载 2017-10-31 10:11:32 · 219 阅读 · 0 评论