JDK源码阅读系列
JDK源码阅读系列
猿气
码畜
展开
-
3.11 JDK源码阅读之LinkedHashSet
LinkedHashSet Set集合不包含重复的元素,这是使用Set的主要原因。有三种常见的Set实现——HashSet, TreeSet和LinkedHashSet。什么时候使用它们,使用哪个是个重要的问题。总体而言,如果你需要一个访问快速的Set,你应该使用HashSet;当你需要一个排序的Set,你应该使用TreeSet;当你需要记录下插入时的顺序时,你应该使用LinedHa...原创 2018-08-17 18:34:40 · 425 阅读 · 4 评论 -
3.12 JDK源码阅读之TreeMap
TreeMap集合是基于红黑树(Red-Black tree)的 NavigableMap实现。该集合最重要的特点就是可排序,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。这句话是什么意思呢?就是说TreeMap可以对添加进来的元素进行排序,可以按照默认的排序方式,也可以自己指定排序方式。 根据上一...转载 2018-08-18 17:06:54 · 192 阅读 · 0 评论 -
3.13 JDK源码阅读之TreeSet
从图中可以看出:(01) TreeSet继承于AbstractSet,并且实现了NavigableSet接口。(02) TreeSet的本质是一个"有序的,并且没有重复元素"的集合,它是通过TreeMap实现的。TreeSet中含有一个"NavigableMap类型的成员变量"m,而m实际上是"TreeMap的实例"。 public class TreeSet<E&...转载 2018-08-18 17:29:40 · 144 阅读 · 0 评论 -
3.13 JDK源码阅读之Vector
Vector简介Vector 是矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。Vector 继承了AbstractList,实现了List;所以,它是一个队列,支持相关的添加、删除、修改、遍历等功能。Vector 实现了RandmoAccess接口,即提供了随机访问功能。Randm...转载 2018-08-18 17:54:24 · 129 阅读 · 0 评论 -
3.14 JDK源码阅读之Queue
Queue Queue本身是一种先入先出的模型(FIFO),和我们日常生活中的排队模型很类似。根据不同的实现,他们主要有数组和链表两种实现形式。如下图 因为在队列里和我们日常的模型很近似,每次如果要出队的话,都是从队头移除。而如果每次要加入新的元素,则要在队尾加。所以我们要在队列里保存队头和队尾我们可以看到,Deque也是一个接口,它继承了Queue的接口规...转载 2018-08-18 18:39:06 · 165 阅读 · 0 评论 -
1.9 JDK源码阅读之Integer
最大最小范围可以代表number的char[] toStringparseInt Integer把-128到127(可调)的整数都提前实例化了。 这就解释了上面那道面试题的答案,原来你不管创建多少个这个范围内的Integer用ValueOf出来的都是同一个对象。但是为什么JDK要这么多此一举呢? 我们仔细想想, 淘宝的商品大多数都是100以内...原创 2018-08-08 18:47:31 · 714 阅读 · 1 评论 -
1.8 JDK源码阅读之Float
Floatpublic final class Float extends Number implements Comparable<Float> { 结构与Double类似 方法返回根据IEEE754浮点“单一格式”位布局,返回指定浮点值的表示compare方法Math计算...原创 2018-08-08 11:57:08 · 363 阅读 · 0 评论 -
1.7 JDK源码阅读之Double
double的包装类无穷大与无穷小 最大值最小值 Double的指数部 范围 Double的指数部占11位,即可以表示2^11个数(2048个),考虑到补码,范围 应该是-1023~1024或-1024~1023,为啥源码中的范围是-1022~1023 十六进制转换 初始化与值 强制转换 比较 比较计算 ...原创 2018-08-08 11:47:42 · 705 阅读 · 0 评论 -
1.6 JDK源码阅读之Byte
继承Number 实现Comparable为基础包装类的父类public final class Byte extends Number implements Comparable<Byte> { 初始化上下限 toString() 转为int 再toString内部类 ByteCahe 引用https://blog.csdn.net/li...原创 2018-08-08 11:19:39 · 462 阅读 · 0 评论 -
1.6 JDK源码阅读之Boolean
The Boolean class wraps a value of the primitive type in an objectBoolean 将原始boolean类型包装成类 实现序列化以及Comparable接口implements java.io.Serializable, Comparable<Boolean>初始化实例Boolean val...原创 2018-08-08 10:51:25 · 655 阅读 · 0 评论 -
1.5 JDK源码阅读之StringBuilder
1、执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String2、String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的3、在线程安全上,StringBuilder是线程不安全的,而Strin...原创 2018-08-08 10:29:04 · 406 阅读 · 0 评论 -
1.4 JDK源码阅读之StringBuffer
缓存 初始化 16个字符初始化指定字符 重写为同步方法 重写AbstractStringbuilder的方法为同步方法几乎全部重写成同步方法序列化对象...原创 2018-08-08 10:22:52 · 374 阅读 · 0 评论 -
1.3 JDK源码阅读之AbstractStringBuilder
char[] 用来存放string 字符使用量构造函数 返回当前长度 返回当前容量 如果容量不足 扩容如果需求的minCapacity大于value.length 则扩容 默认的扩容机制 扩容后设置新长度返回字符传入字符的index,返回字符串中对应字符的代码点获取字符数组索引前一个元素的代码点 ...原创 2018-08-08 09:23:08 · 371 阅读 · 0 评论 -
1.2 JDK源码阅读之String
String 其实就是字符数组 CharSequence 这个接口是一个只读的字符序列。包括length(), charAt(int index), subSequence(int start, int end)这几个API接口implements java.io.Serializable, Comparable<String>, CharSequencevalue[]是...原创 2018-08-07 19:15:42 · 466 阅读 · 0 评论 -
1.1 JDK源码阅读之Object
Object类是所有类的父类 方法解析: 得到Classpublic final native Class<?> getClass(); 得到Object hashCodepublic native int hashCode(); 判断hashCode 决定是否equalspublic boolean equals(Object obj) {...原创 2018-08-07 18:37:50 · 575 阅读 · 0 评论 -
2.1 JDK源码阅读之Thread
Thread转载https://blog.csdn.net/liudaohonglk/article/details/78278368参考 https://blog.csdn.net/liudaohonglk/article/details/78278368 registerNatives()方法主要作用就是将C/C++中的方法映射到Java中的native方法,实现方法...转载 2018-08-09 17:24:30 · 436 阅读 · 0 评论 -
2.2 JDK源码阅读之ThreadLocal
ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。 ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问, 通常是类中的 private static 字段,是对该字段初始值的一个拷贝,...转载 2018-08-09 18:23:06 · 191 阅读 · 2 评论 -
2.3 JDK源码阅读之Throwable
转载:http://riddickbryant.iteye.com/blog/444185package java.lang; import java.io.*; /** * * Throwable是所有Error和Exceptiong的父类 * 注意它有四个构造函数: * Throwable() * Throwable(String message)...转载 2018-08-09 18:37:02 · 417 阅读 · 0 评论 -
2.4 JDK源码阅读之Error
Error基本都是调用了Throwable 的方法来实现 //填充异常轨迹数组构造函数,填充detailmassage 和cause,cause 表示起因对象原创 2018-08-13 09:37:11 · 497 阅读 · 0 评论 -
2.5 JDK源码阅读之Exception
Exception调用的是Throwable中的方法 调用的基本都是Throwable中的方法 Exception的各种构造方法原创 2018-08-13 16:43:28 · 620 阅读 · 0 评论 -
2.6 JDK源码阅读之Class
Java基本类之一,反射机制的基础class中方法分为三类: 生成实例forName方法和newInstance方法。获取类信息getDeclaredMethods类型转换 class中重要方法解析public final class Class<T> implements java.io.Serializable, ...转载 2018-08-13 17:44:05 · 312 阅读 · 0 评论 -
2.7 JDK源码阅读之ClassLoader
JDK 默认提供了如下几种ClassLoader JDK 默认提供了如下几种ClassLoaderBootstrp loaderBootstrp加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载%JAVA_HOME%/jre/lib,-Xbootclasspath参数指定的路径以及%JAVA_HOME%/jre/classes中的类。ExtClas...转载 2018-08-13 19:13:49 · 478 阅读 · 0 评论 -
2.8 JDK源码阅读之Compiler
Compiler1、提供支持Java到本机代码编译器和相关服务。2、用来加载类库3、决定系统正确退出原创 2018-08-14 09:17:59 · 489 阅读 · 0 评论 -
2.9 JDK源码阅读之System
System 类包含一些有用的类字段和方法。它不能被实例化。1、在 System 类提供的设施中,有标准输入、标准输出和错误输出流;2、对外部定义的属性和环境变量的访问;3、加载文件和库的方法;4、还有快速复制数组的一部分的实用方法。常用方法1.currentTimeMillis()2.nanoTime()3.arraycopy(Object src, in...原创 2018-08-14 09:43:38 · 533 阅读 · 0 评论 -
3.0 JDK源码阅读之Package
Packagejava.lang.Package.getPackages() 方法获取所有目前已知调用方的ClassLoader实例的软件包。这些包对应于通过加载或名称至ClassLoader实例访问的类。如果调用者的ClassLoader实例是引导类加载器的实例,这可能是null,在一些实现来表示,对应于由引导类加载器实例加载的类仅包将被返回。 ...原创 2018-08-14 18:03:24 · 540 阅读 · 0 评论 -
3.1 JDK源码阅读之Void
public final class Void Void类是一个不可实例化的占位符类,如果方法返回值是Void类型,那么该方法只能返回null类型。 java.lang.Void 与 void的比较及使用void关键字表示函数没有返回结果,是java中的一个关键字。java.lang.Void是一种类型。例如给Void引用赋值null。 ...原创 2018-08-14 18:11:56 · 573 阅读 · 0 评论 -
3.2 JDK源码阅读之AbstractList
Java.util 系列源码 AbstractList //继承于AbstractCollection接口,实现了List接口public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> { protecte...原创 2018-08-14 23:10:15 · 293 阅读 · 0 评论 -
3.3 JDK源码阅读之AbstractMap
AbstractMap 提供了 Map 的基本实现,使得我们以后要实现一个 Map 不用从头开始,只需要继承 AbstractMap, 然后按需求实现/重写对应方法即可。 方法分类1.添加2.删除3.获取4.查询状态5.比较6.视图 添加: 默认是不支持添加操作的,实现类需要重写 put() 方法。 删除:获取: 查询状态 比...原创 2018-08-15 10:06:10 · 303 阅读 · 0 评论 -
3.4 JDK源码阅读之AbstractSet
AbstractSet 此类提供 Set 接口的骨干实现,从而最大限度地减少了实现此接口所需的工作。并没有重写 AbstractCollection 类中的任何实现(包括add()方法)。它仅仅添加了 equals 和 hashCode 的实现。 public boolean equals(Object o) :比较指定对象与此 set 的相等性。 public int...原创 2018-08-15 10:49:11 · 283 阅读 · 0 评论 -
3.5 JDK源码阅读之ArrayList
ArrayList是List接口的可变数组的实现。实现了所有可选列表的操作,并允许包括null在内的所有元素。同时ArrayList也有内部的方法用于操作数组大小以及元素。 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重...原创 2018-08-15 18:44:38 · 344 阅读 · 0 评论 -
3.6 JDK源码阅读之LinkedList
虽然实现了List的接口,但底层并不是对数组进行的操作,而是使用双向循环链表实现。继承于AbstractSequentialList,可以被当作堆栈、队列或双端队列进行操作。链表节点 Entry构造方法 因为是双向-循环-链表 第一种构造方法在初始化时只有头元素的情况下,previous和next都指向自己,形成一个闭环,这是称为循环的原因。 第二种方法是接...原创 2018-08-15 18:52:56 · 287 阅读 · 0 评论 -
3.7 JDK源码阅读之HashMap
Hashmap实际上是一个数组和链表的结合体(在数据结构中,一般称之为“链表散列“),请看下图(横排表示数组,纵排表示数组元素【实际上是一个链表】)属性static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 默认容量16static final int MAXIMUM_CAPACI...原创 2018-08-16 16:22:02 · 366 阅读 · 0 评论 -
3.8 JDK源码阅读之HashTable
HashTable Hash值的两个作用 :key值hash计算后快速定位table的index 然后依次比较table上的Entry链表在寻找key值的匹配值缩短寻找时间,对于怎么实现时间复杂度为O(1): 参考 :java中hashmap容器实现查找O(1)时间复杂度的思考https://blog.csdn.net/u014633283/article/deta...原创 2018-08-17 09:28:02 · 310 阅读 · 0 评论 -
3.9 JDK源码阅读之HashSet
HashSetHashSet的结构就是HashMap HashSet就是限制了功能的HashMap 与hashmap 容量与负载因子相同扩展:LinkedHashSet 与TreeSetLinkedHashSet 底层实现也是HashMap 。TreeSet 底层是TreeMap而TreeMap的底层实现借助了HashMap转载dalao的博客https...原创 2018-08-17 10:51:07 · 284 阅读 · 0 评论 -
3.10 JDK源码阅读之LinkedHashMap
LinkedHashMap LinkedHashMap将HashMap和双向链表合二为一 HashMap和双向链表合二为一即是LinkedHashMap。所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的HashMap。 概括的说,LinkedHashMap 是一个关联数组、哈...原创 2018-08-17 15:21:48 · 328 阅读 · 0 评论 -
2.0 JDK源码阅读之Long
java java.lang.Long详解之一:toString()引用:https://blog.csdn.net/songylwq/article/details/9014611 toString(long i, int radix)首先让我们目睹下Long中强大的toString方法。 public static String toString(long ...转载 2018-08-08 18:57:24 · 215 阅读 · 0 评论