
java 源码解析
文章平均质量分 96
分析java重点方法、类或接口的源码,以便更深刻的理解
中都
风习袅袅,盈水展千华,飞檐亭角清铃响;犹记当初,你回眸莞尔,一笑倾城百日香。!
展开
-
集合(七)——PriorityQueue源码解析
目录1、继承关系2、基本属性3、构造函数3、默认值大小、扩容方式、底层数据结构、特点4、方法介绍5、应用场景:6、大根堆、小根堆1、继承关系2、基本属性3、构造函数3、默认值大小、扩容方式、底层数据结构、特点默认值大小:默认数组大小11,扩容方式:如果当前容量小于64:2n+2倍扩容,否则1.5倍扩容底层数据结构:大根堆、小根堆特点:可以存储重复的元素、不可以存储nu...原创 2018-07-31 20:28:30 · 325 阅读 · 0 评论 -
集合(六)——HashSet、LinkedHashSet、TreeSet源码解析
目录一、HashSet1、继承关系2、基本属性3、构造函数4、增删改查方法:二、LinkedHashSet1、继承关系2、构造函数3、LinkedHashSet的特点4、应用场景:三、TreeSet1、继承关系2、构造函数3、特点一、HashSet1、继承关系2、基本属性3、构造函数4、增删改查方法:从以上源码可以看出,HashSet底层是通过HashMap实现的,它将要添加的...原创 2018-07-31 13:29:37 · 348 阅读 · 0 评论 -
集合(五)——LinkedHashMap源码解析以及WeakHashMap、TreeMap的特点
目录一、LinkedHashMap二、WeakHashMap三、TreeMap一、LinkedHashMap1、继承关系:2、基本属性:HashMap有的它都有,还多了两个:header:标记指针,用来遍历accessOrder:顺序性:true:访问有序 false:插入有序 默认:false插入有序3、构造函数和HashMap差不多,调用父类构造函数;4、LinkedHa...原创 2018-07-28 16:52:33 · 861 阅读 · 0 评论 -
集合(四)——Hashtable源码解析
目录1,继承关系:2,基本属性,默认值:3,扩容方式:4、构造函数5,增删改查方法:1,继承关系:2,基本属性,默认值:基本属性和HashMap中差不多;数组初始化大小:11加载因子:0.753,扩容方式:2*table.length+14、构造函数如图4所示,构造函数:5,增删改查方法:①put方法:public synchronized V put(K key, V...原创 2018-07-28 16:48:40 · 779 阅读 · 0 评论 -
集合(二)——List 接口
目录List接口数组列表类:ArrayList链表类:LinkedListList接口List接口是一个有序集合,其元素以线性方式存储,集合中允许存放重复的元素。List接口的定义如下:public interface List<E> extends Collection<E> { }相比于父接口Collection扩充的方法:名称作用ge...原创 2018-07-27 18:09:43 · 1010 阅读 · 0 评论 -
集合(三)——HashMap源码解析
目录JDK 1.7与JDK 1.8 HashMap的不同点:HashMap源码解析1、继承关系:2、基本属性、一些默认值:3、构造函数:4、增删改查方法:5、注意:JDK 1.7与JDK 1.8 HashMap的不同点:JDK 1.7基于数组+链表的数据结构(就是一个存储链表的数组), JDK 1.8数组+链表+红黑树(当链表长度达到8,会转化成红黑树,以提升它的查询、插入效率);JDK ...原创 2018-07-28 13:41:15 · 741 阅读 · 0 评论 -
多线程(十二)—— 线程池
目录1、为什么要有线程池2、线程池类的继承关系3、ThreadPollExecutor源码解析:4、线程池执行过程5、Executors静态工厂里的线程池1、为什么要有线程池优点:①避免大量线程之间相互的抢占资源导致的阻塞现象②减少线程的创建和销毁带来的开销提升性能③提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行④提高线程的可管理性。线程是稀缺资源,如果无限制的创...原创 2018-08-27 09:32:58 · 744 阅读 · 0 评论 -
多线程 (八)—— Condition
我们从Condition对象的创建开始:Condition对象是通过ReentrantLock对象的newCondition()方法来创建的:下面就来看看ConditionObject类的源码:下来主要看有关通信的三个方法await()、signal()、signalAll()方法,其他方法调用的时候再看;总结一下就是:1、await的过程如下:①将当前线程加入等待队列(等...原创 2018-08-21 08:02:25 · 409 阅读 · 0 评论 -
多线程(七)—— ReentrantLock源码解析
目录可重入锁有两种实现方式 :一、AbstractQueuedSynchronizer源码解析1、继承关系2、构造函数3、属性二、ReentrantLock源码解析1、继承关系2、构造函数3、属性和内部类Sync类源码(公平锁和非公平锁的父类):NonfairSync(非公平性锁)源码:FairSync(公平性锁)源码4、方法可重入锁有两种实现方式 :1、公平锁:先来后到,先来抢锁的线程先执行...原创 2018-08-20 17:00:22 · 1237 阅读 · 0 评论 -
多线程(十)—— ConcurrentHashMap源码解析
目录ConcurrentHashMap的特点:线程安全ConcurrentHashMap JDK1.7源码解析:1、继承关系2、属性和主要构造方法3、重要方法ConcurrentHashMap 在JDK 1.7个JDK 1.8上的不同点:ConcurrentHashMap的特点:线程安全ConcurrentHashMap底层数据结构:数组+数组+链表(可以理解就是一个存储HashMap元素的...原创 2018-08-21 20:44:28 · 1168 阅读 · 0 评论 -
String类解析
目录首先我们看看String类的源代码:各种不同写法字符串的地址:String类的常用方法:首先我们看看String类的源代码:各种不同写法字符串的地址:public static void main(String[] args) { String str1 = "hello"; String str2 = new String("hello"); ...原创 2018-05-10 14:41:29 · 475 阅读 · 0 评论 -
类加载机制
从类------->对象分三步:1、加载2、链接(验证、准备、解析)链接的三个步骤:1、验证阶段用于确保类或接口的二进制表示结构上是正确的;2、准备阶段是为类或接口的静态字段分配空间,并用默认值初始化这些字段,这个阶段不会执行虚拟机任何代码;3、解析是根据运行时常量池的符号引用来动态决定具体值的过程;3、初始化(顺序为:静态块、实例块、构造函数)要想要加载一个类,首先...原创 2018-05-25 03:58:34 · 984 阅读 · 3 评论 -
继承和多态(动态绑定)
继承继承是两个类之间的一种关系。当一个类B继承了一个已存在的类A后,类B就拥有了类A的所有的非private的以及父类的构造函数以外的所有属性和方法,但同时,类B中还可以根据需要添加新的属性和方法;继承不是子类简单的复制和粘贴父类的属性和方法,子类并不局限于父类提供的属性和方法,还可以定义自身的属性和方法,还可以重写从父类继承来的方法;在java中一个子类只能拥有一个父类,但一个父类可...原创 2018-05-21 18:04:09 · 1782 阅读 · 0 评论 -
数组的方法和属性
目录:数组的深入使用1、命令行参数2、数组操作类数组的深入使用1、命令行参数public static void main(String[] args) 中有一个 String[] args 参数,该参数是一个字符串数组,在 java 命令行后面带上参数 ,java 虚拟机就直接把它存放到了 main()方法中的 String 数组里,该字符串数组是用来保存运行 main()函数时输入的参...原创 2018-04-29 15:29:05 · 2461 阅读 · 0 评论