- 博客(46)
- 收藏
- 关注
原创 LinkedHashSet
文章目录一、顶部注释分析1.1 从注释中得到的结论二、源码分析2.1 定义2.2 构造方法一、顶部注释分析1.1 从注释中得到的结论Hash table and linked list implementation of the Set interface:基于哈希表和链表的 Set 实现LinkedHashSet 底层实际上就是 LinkedHashMapLinkedHashSet ...
2019-04-11 15:29:38 284
原创 HashSet
文章目录一、顶部注释分析1.1 从注释中得到的结论二、源码分析2.1 定义2.2 字段2.3 构造方法2.3.1 常规构造方法2.3.2 特殊构造方法一、顶部注释分析1.1 从注释中得到的结论This class implements the Set interface, backed by a hash table (actually a HashMap instance):该类实现了 ...
2019-04-11 15:29:15 1137
原创 TreeSet
文章目录一、顶部注释分析1.1 从注释中得到的结论二、源码分析2.1 定义2.2 字段2.3 构造方法一、顶部注释分析1.1 从注释中得到的结论A NavigableSet implementation based on a TreeMap:基于 TreeMap 的 NavigableSet 实现HashSet 底层实际上是一个 NavigableMap 接口类型的实例,如 TreeMa...
2019-04-11 15:28:47 188
原创 ConcurrentHashMap
文章目录一、顶部注释分析1.1 数据结构1.1.1 JDK1.7实现1.1.2 JDK1.8实现1.2 从注释中得到的结论二、源码分析2.1 定义2.2 字段2.3 Node静态内部类2.4 构造方法2.5 put 操作2.5.1 put 方法大致步骤2.5.2 初始化 table 数组2.6 get 操作一、顶部注释分析1.1 数据结构1.1.1 JDK1.7实现在 JDK1.7中,C...
2019-04-11 15:28:17 156
原创 TreeMap
文章目录一、顶部注释分析1.1 首句分析1.2 从注释中得到的结论二、源码分析2.1 定义2.2 字段2.3 构造方法2.4 put 操作2.5 get 操作2.6 remove 操作2.7 entrySet三、与HashMap对比一、顶部注释分析1.1 首句分析A Red-Black tree based NavigableMap implementation. The map is s...
2019-04-11 15:27:38 286
原创 LinkedHashMap
文章目录一、顶部注释分析1.1 数据结构1.2 从注释中得到的结论二、源码分析2.1 定义2.2 字段2.3 Entry 静态内部类2.4 构造方法2.5 迭代方式 accessOrder 的含义2.6 常用操作2.6.1 put2.6.2 get2.6.3 remove2.7 回调函数2.8 entrySet一、顶部注释分析1.1 数据结构1.2 从注释中得到的结论LinkedHas...
2019-04-09 21:36:33 565
原创 HashMap
文章目录一、顶部注释分析1.1 数据结构1.2 从注释中得到的结论二、源码分析2.1 定义2.2 字段2.3 Node静态内部类2.4 构造方法2.5 threshold 赋值2.6 hash值计算2.6.1 计算方式2.6.2 计算原理2.7 resize 扩容2.8 put 操作2.8.1 put 方法2.8.2 putVal 方法2.9 get 操作2.9.1 get 方法2.9.2 get...
2019-04-09 21:36:01 554
原创 LinkedList
文章目录一、顶部注释分析1.1 首句定义1.2 从注释中得到的结论二、源码分析2.1 定义2.2 字段2.3 构造方法2.4 添加元素2.5 get、set、remove2.6 队列操作(添加、删除、获取)2.7 栈操作(入栈、出栈、获取栈顶)一、顶部注释分析1.1 首句定义Doubly-linked list implementation of the List and Deque in...
2019-04-09 21:34:20 119
原创 Vector
文章目录一、顶部注释分析二、源码分析2.1 定义2.2 字段2.3 构造方法2.4 常用方法2.5 扩容一、顶部注释分析Vector是一个 growable 的数组,它的大小可以根据需要增加或减少Vector is synchronized. If a thread-safe implementation is not needed, it is recommended to use Ar...
2019-04-09 21:33:02 213
原创 ArrayList
文章目录一、 顶部注释分析1.1 首句定义1.2 从注释中得到的结论二、源码分析2.1 定义2.2 字段2.3 构造方法2.4 添加元素2.5 容量检查和扩容2.6 get、set、remove、trimToSize2.7 modCount一、 顶部注释分析1.1 首句定义Resizable-array implementation of the List interface:List 接...
2019-04-09 21:30:14 116
原创 希尔排序-ShellSort
/** * 希尔排序 * <p> * 思想: * 1、希尔排序也称为"缩小增量排序",与插入排序相比,它会优先比较距离较远的元素; * 2、先将待排序数组按照增量分成多个子序列; * 3、然后对每个子序列进行插入排序; * 4、不断缩小增量值直至每个子序列中只包含一个元素 */public class ShellSort implements Sortable{ ...
2019-04-04 14:38:06 112
原创 选择排序-SelectionSort
/** * 选择排序 * <p> * 思想: * 1、每次循环都从还未排序的部分中找出最小(最大)元素; * 2、然后放到已排序部分的末尾; * 3、重复上述步骤直至所有元素均被处理 */public class SelectionSort implements Sortable{ @Override public void sort(int[] so...
2019-04-04 14:37:35 112
原创 基数排序-RedixSort
import java.util.ArrayList;/** * 基数排序 * <p> * 思想: * 1、基数排序可看成是将待排序元素拆分成多个关键字进行排序; * 2、若以元素位数为关键字,则从最低位开始,以该位上的值进行计数排序(若为 10 进制则设 10个桶); * 3、从低到高在下一位上重复上述步骤,直至所有元素的最高位 */public class Re...
2019-04-04 14:37:10 154
原创 快速排序-QuickSort
/** * 快速排序 * <p> * 思想: * 1、先找出一个基准数,例如取第一个元素; * 2、利用左右两个指针,右指针从右往左找到一个小于基准数的元素,左指针从左往右找到一个大于基准数的元素; * 3、交换两个指针对应的元素,并重复该步骤,直至两个指针相遇; * 4、然后将基准值放入指针相遇的对应位置,此时小于基准值的元素都在其左边,大于基准值的元素都在其右边; ...
2019-04-04 14:35:57 104
原创 归并排序-MergeSort
/** * 归并排序 * <p> * 思想: * 1、先将待排序数据不断拆分为左右两个子序列,直至子序列不可再拆分; * 2、然后将两个左右子序列进行合并,同时保证有序; * 3、重复上述拆分合并步骤直至完成排序 */public class MergeSort implements Sortable{ @Override public void so...
2019-04-04 14:35:27 121
原创 插入排序-InsertionSort
/** * 插入排序 * <p> * 思想: * 1、首先默认第一个元素已经有序; * 2、取下一个元素,将其从后往前依次和已排序部分进行比较; * 3、如果该元素小于已排序元素就继续向前找,同时不断将已排序元素的位置向后移动; * 5、直到其大于某个已排序元素,则插入到该元素之后; * 6、重复上述步骤直至所有元素均被处理 */public class Inser...
2019-04-04 14:34:44 167
原创 堆排序-HeapSort
/** * 堆排序 * <p> * 思想: * 1、利用堆这种高效的数据结构,先根据所有元素构建一个最大堆,即堆顶元素为最大值; * 2、然后每次将最后一个元素与堆顶元素互换,得到当前最大值,移动最后一个元素对应的指针并调整堆结构; * 3、如此重复直至所有元素均被处理 */public class HeapSort implements Sortable{ ...
2019-04-04 14:34:04 105
原创 计数排序-CountingSort
/** * 计数排序 * <p> * 思想: * 1、先找出待排序元素中的最大值 max,然后定义 max + 1个桶,每个桶用于记录该桶对应元素出现的次数; * 2、将所有元素依次放入对应的桶中; * 3、不同的桶之间可事先保证有序,因此只需按桶的顺序依次输出元素; * 4、对于每个桶,其中存储的数字 n 表示需要输出 n 个该桶对应的元素 */public cla...
2019-04-04 14:33:30 99
原创 桶排序-BucketSort
import java.util.ArrayList;import java.util.Collections;/** * 基数排序、计数排序和桶排序实际上都利用了桶的概念,但在对桶的使用方法上有区别: * <p> * 基数排序:根据键值每一位上的数字来确定对应的桶; * 计数排序:每个桶只存储单种键值(键值相同可放到一个桶中); * 桶排序:每个桶存储一定范围内的键值...
2019-04-04 14:32:49 223
原创 冒泡排序-BubbleSort
/** * 冒泡排序 * <p> * 思想: * 1、每次循环都从数组起始位开始,依次比较前后两个数,若后者大于前者则交换; * 2、则每循环一轮,就可以将当前最大的数移到数组的最后; * 3、总共循环 n-1 轮后完成排序 */public class BubbleSort implements Sortable{ @Override public ...
2019-04-04 14:31:46 248
原创 第13章-线程安全与锁优化
文章目录13.2 线程安全13.2.1 Java 语言中的线程安全13.2.1.1 不可变13.2.1.2 绝对线程安全13.2.1.3 相对线程安全13.2.1.4 线程兼容13.2.1.5 线程对立13.2.2 线程安全的实现方法13.2.2.1 互斥同步13.2.2.2 非阻塞同步13.2.2.3 无同步方案13.3 锁优化13.3.1 自旋锁与自适应自旋13.3.2 锁消除13.3.3 锁...
2019-03-27 12:58:58 153
原创 第12章-Java内存模型与线程
文章目录12.1 概述12.2 硬件的效率与一致性12.3 Java内存模型12.3.1 主内存与工作内存12.3.2 内存间交互操作12.3.3 对于 volatile 型变量的特殊规则12.3.3.1 可见性12.3.3.2 禁重排12.3.3.3 具体实现方式12.3.3.4 volatile变量的特殊规则12.3.4 对于long和double 型变量的特殊规则12.3.5 原子性、可见性...
2019-03-27 12:57:48 323
原创 第11章-晚期(运行期)优化
文章目录11.1 概述11.2 HotSpot虚拟机内的即时编译器11.2.1 解释器与编译器11.2.2 编译对象与触发条件11.2.2.1 方法调用计数器11.2.2.2 回边计数器11.2.3 编译过程11.3 编译优化技术11.3.1 优化技术概览11.3.2 公共子表达式消除11.3.3 数组边界检查消除11.3.4 方法内联11.3.5 逃逸分析11.4 Java 与 C/C++ 的编...
2019-03-27 12:56:48 155
原创 第10章-早期(编译期)优化
文章目录10.2 Javac 编译器10.2.1 编译过程10.2.2 解析与填充符号表10.2.2.1 词法、语法分析10.2.2.2 填充符号表10.2.3 注解处理器10.2.4 语义分析与字节码生成10.2.4.1 标注检查10.2.4.2 数据及控制流分析10.2.4.3 解语法糖10.2.4.4 字节码生成10.3 Java语法糖的味道10.3.1 泛型与类型擦除10.3.2 自动装箱...
2019-03-27 12:54:50 374
原创 第8章-虚拟机字节码执行引擎
文章目录8.1 概述8.2 运行时栈帧结构8.2.0 概述8.2.1 局部变量表8.2.2 操作数栈8.2.3 动态连接8.2.4 方法返回地址8.3 方法调用8.3.1 解析8.3.2 分派8.3.2.1 静态分派8.3.2.2 动态分派8.3.2.3 单分派与多分派8.3.2.4 虚拟机动态分派的实现8.4 基于栈的字节码解释执行引擎8.4.1 解释执行8.4.2 基于栈的指令集与基于寄存器的...
2019-03-27 12:53:53 154
原创 第7章-虚拟机类加载机制
文章目录7.1 概述7.2 类加载的时机7.2.1 生命周期7.2.2 加载时间点7.3 类加载的过程7.3.1 加载7.3.2 验证7.3.2.1 文件格式验证7.3.2.2 元数据验证7.3.2.3 字节码验证7.3.2.4 符号引用验证7.3.3 准备7.3.4 解析7.3.4.1 类或接口的解析7.3.4.2 字段解析7.3.4.3 类方法解析7.3.4.4 接口方法解析7.3.5 初始化...
2019-03-26 10:02:53 250
原创 第6章-类文件结构
文章目录6.2 无关性的基石6.3 Class类文件的结构6.3.0 概述6.3.1 魔数与Class文件的版本6.3.2 常量池6.3.2.1 CONSTANT_Class_info 型常量的结构6.3.2.2 CONSTANT_Utf8_info 型常量的结构6.3.2.3 常量池中的14种常量项的结构总表6.3.2.4 实例分析(6.3.1~6.3.2)6.3.3 访问标志6.3.4 类索引...
2019-03-26 10:02:32 927
原创 第3章-垃圾收集器与内存分配策略
文章目录3.1 概述3.2 对象已死吗3.2.1 引用计数算法3.2.2 可达性分析算法3.2.3 再谈引用3.2.4 生存还是死亡3.2.5 回收方法区3.3 垃圾收集算法3.3.1 标记-清除算法(Mark-Sweep)3.3.2 复制算法(Copying)3.3.3 标记-整理算法(Mark-Compact)3.3.4 分代收集算法(Generational Collection)3.4 H...
2019-03-26 10:01:46 274
原创 第2章-Java内存区域与内存溢出异常
文章目录2.2运行时数据区域2.2.1 程序计数器(各线程私有)2.2.2 Java虚拟机栈(各线程私有)2.2.3 本地方法栈(各线程私有)2.2.4 Java堆(各线程共享)2.2.5 方法区(各线程共享)2.2.6 运行时常量池(方法区一部分)2.2.7 直接内存2.3 HotSpot 虚拟机对象探秘2.3.1 对象的创建2.3.2 对象的内存布局2.3.3 对象的访问定位2.2运行时数据...
2019-03-26 10:00:55 208
原创 Java线程
文章目录1.2 何谓线程1.2.1 单线程程序1.2.2. 多线程程序1.3 线程的启动1.3.1 启动线程的方法1.3.2 程序的终止1.3.3 Thread类和Runnable接口1.4 线程的暂停1.4.1 sleep方法的调用1.5 线程的互斥处理1.5.1 synchronized方法1.5.2 锁和监视1.6 线程的协作1.6.1 线程控制方法1.6.2 等待队列1.6.3 wait、...
2019-03-26 09:50:29 215
原创 Java内存模型
文章目录Java内存模型重排序1.什么是重排序2. 示例程序(会显示出 x < y 吗)可见性1. 什么是可见性共享内存与操作synchronized1. 线程的互斥处理2. 同步处理volatile1. 同步处理final1. final字段与构建线程安全的实例2. 不要从构造函数中泄漏 thisDouble-Checked Locking模式的危险性1. 示例程序2. Initiali...
2019-03-26 09:49:52 159
原创 第13章-总结多线程编程的模式语言
文章目录13.1 多线程编程的模式语言13.1.1 模式与模式语言13.2 Single Threaded Execution 模式——能通过这座桥的只有一个人13.3 Immutable 模式——想破坏也破坏不了13.4 Guarded Suspension 模式——等我准备好哦13.5 Balking 模式——不需要就算了13.6 Producer-Consumer 模式——我来做,你来用13...
2019-03-26 09:48:30 232
原创 第12章-ActiveObject
文章目录12.1 模式简介12.3 ActiveObject模式中的角色12.3.1 Client(委托者)12.3.2 ActiveObject(主动对象)12.3.3 Proxy(代理人)12.3.4 Scheduler12.3.5 MethodRequest12.3.6 ConcreteMethodRequest12.3.7 Servant(仆人)12.3.8 ActivationQueue...
2019-03-26 09:47:15 678
原创 第11章-ThreadSpecificStorage
文章目录11.1 Thread-Specific Storage模式11.2 java.lang.ThreadLocal11.2.1 java.lang.ThreadLocal 就是储物间11.2.2 java.lang.ThreadLocal 与泛型11.5 Thread-Specific Storage模式中的角色11.5.1 Client(委托者)11.5.2 TSObjectProxy(线...
2019-03-26 09:46:48 536
原创 第10章-TwoPhaseTermination
文章目录10.1 模式简介10.3 Two-Phase Termination模式中的角色10.3.1 TerminationRequester(终止请求发出者)10.3.2 Terminator(终止者)10.4 拓展思路的要点10.4.1 不能使用Thread类的stop方法10.4.2 仅仅检查标志是不够的10.4.3 仅仅检查中断状态是不够的10.4.4 优雅地终止线程10.4.4.1 安...
2019-03-26 09:46:17 401
原创 第9章-Future
文章目录9.1 模式简介9.3 Future模式中的角色9.3.1 Client(请求者)9.3.2 Host9.3.3 VirtualData(虚拟数据)9.3.4 RealData(真实数据)9.3.5 Future(期货)9.3.6 类图9.4 拓展思路的要点9.4.1 吞吐量会提高吗9.4.2 异步方法调用的 “返回值”9.4.3 “准备返回值” 和 “使用返回值” 的分离9.4.4 变种...
2019-03-25 21:28:53 215
原创 第8章-WorkerThread
文章目录8.1 模式简介8.3 Worker Thread模式中的角色8.3.1 Client(委托者)8.3.2 Channel(通信线路)8.3.3 Worker(工人)8.3.4 Request(请求)8.3.5 类图和Timethreads图8.4 拓展思路的要点8.4.1 提高吞吐量8.4.2 容量控制8.4.2.1 Worker角色的数量8.4.2.2 Request角色的数量8.4....
2019-03-25 21:28:28 352
原创 第7章-ThreadPerMessage
文章目录7.1 模式简介7.3 Thread-Per-Message模式中的角色7.3.1 Client(委托人)7.3.2 Host7.3.3 Helper(助手)7.3.4 类图和Timethreads图7.4 拓展思路的要点7.4.1 提高响应性,缩短延迟时间7.4.2 适用于操作顺序没有要求时7.4.3 适用于不需要返回值时7.4.4 应用于服务器7.6 进程与线程7.6.1 线程之间共享...
2019-03-25 21:28:02 551
原创 第6章-ReadWriteLock
文章目录6.1 模式简介6.3 Read-Write Lock模式中的角色6.3.1 Reader(读者)6.3.2 Writer(写者)6.3.3 SharedResource(共享资源)6.3.4 ReadWriteLock(读写锁)6.3.5 类图和Timethreads图6.4 拓展思路的要点6.4.1 利用“读取”操作的线程之间不会冲突的特性来提高程序性能6.4.2 适合读取操作繁重时6...
2019-03-25 21:27:34 157
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人