源码解析
源码解析
软件求生
这个作者很懒,什么都没留下…
展开
-
Hashtable源码分析。
/** * 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。 * * 为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。 * * Hashtable 的实例有两个参数影响其性能:初始容量 和加载因子。容量 是哈希表中桶 的数量,初始容量 就是哈希表创建时的容量。注意,哈希表的状态为 * ...原创 2019-03-28 14:23:11 · 176 阅读 · 0 评论 -
Integer源码分析。
public final class Integer extends Number implements Comparable<Integer> { /* * 继承Number类提供将表示的数值转换为 byte、double、float、int、long 和 short 的方法。<br /> * 实现Comparable接口,获取到compar...原创 2018-12-28 17:24:28 · 438 阅读 · 0 评论 -
String源码分析。
/** * String是final修饰的,说明是不能被继承的,是最终类。<br /> * 首先实现了Serializable接口用于序列化。<br /> * 然后实现了Comparable接口,实现compareTo()方法来用于对比当前对象和传入对象的大小。<br /> * 最后实现了CharSequence接口,实现length()方法,char...原创 2018-12-20 15:37:39 · 332 阅读 · 0 评论 -
HashSet源码解析。
/** * 此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序; * 特别是它不保证该顺序恒久不变。此类允许使用 null 元素。 * 此类为基本操作提供了稳定性能,这些基本操作包括 add、remove、contains 和 size,假定哈希函数将这些元素正确地分布在桶中。 * 对此 set 进行迭代所需的时间与 HashSet ...原创 2019-04-26 17:07:20 · 160 阅读 · 0 评论 -
AtomicInteger源码解析。
/** * * 可以用原子方式更新的 int 值。 * AtomicInteger 可用在应用程序中(如以原子方式增加的计数器),并且不能用于替换 Integer。但是,此类确实扩展了 * Number,允许那些处理基于数字类的工具和实用工具进行统一访问。 */public class AtomicInteger extends Number implements java.io....原创 2019-05-07 16:29:11 · 152 阅读 · 0 评论 -
源码分析:TreeMap中fixAfterInsertion方法。
先了解下红黑树的特性:每个节点或者是黑色,或者是红色。 根节点是黑色。 每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] 如果一个节点是红色的,则它的子节点必须是黑色的。 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。java中TreeMap数据结构采用红黑树实现;put方法每次新加元素后,都要调用fixAfterIns...转载 2019-05-27 14:14:41 · 534 阅读 · 0 评论 -
TreeMap源码解析。
/** * 基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序, * 或者根据创建映射时提供的Comparator 进行排序,具体取决于使用的构造方法。 * * 此实现为 containsKey、get、put 和 remove 操作提供受保证的 log(n) 时间开销。 * 这些算法是 Cormen、Leiserson和 ...原创 2019-05-27 16:15:24 · 735 阅读 · 0 评论 -
Semaphore源码解析。
/** * 一个计数信号量。从概念上讲,信号量维护了一个许可集。 * 如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。 * 每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。 * 但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。 * Semaphore 通常用于限制可以访问某些资源(物理或...原创 2019-07-25 00:16:11 · 265 阅读 · 0 评论 -
CountDownLatch源码解析。
/** *一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 *用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。 *之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用 ...原创 2019-08-07 17:32:45 · 255 阅读 · 0 评论 -
Long源码分析。
public final class Long extends Number implements Comparable<Long> { /* * 继承Number类提供将表示的数值转换为 byte、double、float、int、long 和 short 的方法。<br /> * 实现Comparable接口,获取到compareTo方法。...原创 2018-12-29 17:19:22 · 631 阅读 · 0 评论 -
Enum源码分析。
/** * 请注意,当使用枚举类型作为集合或者映射的键的类型时,可以使用EnumSet和EnumMap更高效。 * */public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable { /* * 实现Comparable接口...原创 2019-01-01 23:23:30 · 427 阅读 · 0 评论 -
LinkedHashMap源码分析。
/** * Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与 HashMap 的不同之处在于, * 后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序, * 该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注意,如果在映射中重新插入 键,则插入顺序不受影响。 * (如果在调用 m.put(k, v) 前 m.containsKey(k) 返回了 ...原创 2019-01-23 15:41:15 · 241 阅读 · 0 评论 -
HashMap源码分析。
/** *基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。 *(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。) *此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 *此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。 *迭代 co...原创 2019-01-23 11:13:50 · 222 阅读 · 0 评论 -
LinkedList源码分析。
/** * List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。 * 除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。 * 这些操作允许将链接列表用作堆栈、队列或双端队列。 * 此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他...原创 2019-01-23 09:56:19 · 191 阅读 · 0 评论 -
BigDecimal源码分析。
/** * 不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。 * 如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。 * 因此,BigDecimal 表示的数值是 (unscaledValue × 10的-scale次幂)。 * BigDecimal...原创 2019-01-22 11:21:00 · 4406 阅读 · 2 评论 -
ArrayList源码分析。
/** * List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。 * 除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。 * (此类大致上等同于 Vector 类,除了此类是不同步的。) * size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。 * ...原创 2019-01-19 20:55:35 · 372 阅读 · 0 评论 -
URLClassLoader源码分析。
/** * 该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。 * 这里假定任何以 '/' 结束的 URL 都是指向目录的。 * 如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件。 * 创建 URLClassLoader 实例的 AccessControlContext 线程将在后续加载类和资源时使用。 * 为加载的类默认授予...原创 2019-01-15 23:05:08 · 1209 阅读 · 0 评论 -
ClassLoader 源码分析。
/** * 类加载器是负责加载类的对象。ClassLoader 类是一个抽象类。 * 如果给定类的二进制名称,那么类加载器会试图查找或生成构成类定义的数据。 * 一般策略是将名称转换为某个文件名,然后从文件系统读取该名称的“类文件”。 * 每个 Class 对象都包含一个对定义它的 ClassLoader 的引用。 * 数组类的 Class 对象不是由类加载器创建的,而是由 Jav...原创 2019-01-13 23:27:04 · 989 阅读 · 3 评论 -
ThreadLocal源码分析。
public class ThreadLocal<T> { /* * threadlocal依赖于每个线程连接到每个线程的线性探测散列映射。 * ThreadLocal对象充当键,通过threadLocalHashCode进行搜索。 * 这是一个自定义的哈希码(只在ThreadLocalMaps中有用), * 它可以在相同线程使用连续构造的线程局部变量的常见情况下消...原创 2019-01-05 16:03:11 · 238 阅读 · 0 评论 -
Proxy源码解析。
/** * Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。 * * 创建某一接口 Foo 的代理: * * InvocationHandler handler = new MyInvocationHandler(...); * Class proxyClass = Proxy.getProxyClass( * ...原创 2019-08-27 17:05:14 · 1305 阅读 · 0 评论