Java基础知识-源码
文章平均质量分 85
孟瑶_my
这个作者很懒,什么都没留下…
展开
-
String 源码解析
String源码分析概述在分析String的源码之前,打算先介绍一点关于JVM的内存分布,这样有助于我们更好地去理解String的设计:JVM内存模型 Method Area:方法区,当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析类型信息,然后把这些类型信息(包括类信息、常量、静态变量等)放到方法区中,该内存区域被所有线程共享,本地方法区存...原创 2018-07-30 15:26:42 · 156 阅读 · 0 评论 -
HashSet源码解析
1. HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 2. HashSet的实现: 对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,...转载 2018-08-23 17:09:15 · 124 阅读 · 0 评论 -
LinkedHashMap 源码分析
LinkedHashMap 底层分析众所周知 HashMap 是一个无序的 Map,因为每次根据 key 的 hashcode 映射到 Entry 数组上,所以遍历出来的顺序并不是写入的顺序。因此 JDK 推出一个基于 HashMap 但具有顺序的 LinkedHashMap 来解决有排序需求的场景。它的底层是继承于 HashMap 实现的,由一个双向链表所构成。LinkedHas...原创 2018-08-17 13:47:17 · 97 阅读 · 0 评论 -
HashMap ConcurrentHashMap 源码解析
前言Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 ...转载 2018-07-23 14:35:35 · 122 阅读 · 0 评论 -
HashMap 源码分析(JDK1.8)
HashMap简介JangGwa从源码角度带你熟悉一下JDK1.8的HashMap,首先简单介绍下HashMap。1.HashMap有三种数据结构,数组,链表,红黑树。2.HashMap是非线程安全的3.HashMap存储的内容是键值对(key-value)映射,key、value都可以为null。4.HashMap中的映射不是有序的。5.实现了Cloneable接口,能被...转载 2018-08-16 11:59:31 · 126 阅读 · 0 评论 -
LinkList源码解析
LinkedList是一个实现了List接口和Deque接口的双端链表。 有关索引的操作可能从链表头开始遍历到链表尾部,也可能从尾部遍历到链表头部,这取决于看索引更靠近哪一端。 LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以使用如下方式:List list=Collections.synchronizedList(new LinkedList(......转载 2018-08-15 21:36:49 · 177 阅读 · 0 评论 -
URLClassLoader 加载类
URLClassLoader是ClassLoader的子类,它用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。也就是说,通过URLClassLoader就可以加载指定jar中的class到内存中。 Java代码 package hb.classloader; import java.io.File; import java.lang.refl...转载 2018-08-13 10:03:49 · 2506 阅读 · 0 评论 -
ThreadLocal 源码解析
了解 ThreadLocal实现独立计数器 ThreadLocalMap ThreadLocal API在多线程中,对于同一个对象的访问和修改会造成冲突,而使用 ThreadLocal 创建的变量只能被当前线程使用,不会受到其他线程的干扰。例如我们有个计数器,一共有三个线程,我们想让每个线程都从 1 开始计数,然后按顺序 1、2、3、4 递增,这时候用线程同步的话,一种可能的...原创 2018-08-02 10:24:17 · 159 阅读 · 0 评论 -
BigDecimal 解析
1.引言 借用《Effactive Java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。 2.BigD...原创 2018-08-02 09:50:42 · 158 阅读 · 0 评论 -
Enum源码解析
EnumEnum类是java.lang包中一个类,他是Java语言中所有枚举类型的公共基类。一、定义public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable1.抽象类。首先,抽象类不能被实例化,所以我们在java程序中不能使用...转载 2018-08-01 10:41:56 · 144 阅读 · 0 评论 -
fianl关键字
1. final的简介final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。即使能够知道final具体的使用方法,我想对final在多线程中存在的重排序问题也很容易忽略,希望能够一起做下探讨。2. final的具体使用场景final能够修饰变量,方法和类,也就是final使用范围基本涵盖了java每个地方,下面就...转载 2018-08-01 10:02:06 · 146 阅读 · 0 评论 -
ClassLoader源码解析
写在前面:Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中,JVM在加载类的时候,都是通过ClassLoader的loadClass()方法来加载class的,loadClass使用双亲委派模式。 为了更好的理解类的加载机制,我们来深入研究一下ClassLoader和他的loadClass()...转载 2018-08-09 17:07:40 · 171 阅读 · 0 评论 -
Integer源码解析
Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。类定义public final class Integer extends Number implements Comparabl...转载 2018-07-31 17:55:24 · 150 阅读 · 0 评论 -
HashSet,TreeSet和LinkedHashSet的区别
Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Set就不 会接受这两个对象。HashSetHashSet有以下特点 不能保证元素的排列顺序,顺序有可能发生变化 不是同步的 集合元素可以是n...原创 2018-08-23 17:25:16 · 96 阅读 · 0 评论