Jdk1.8 之 Integer类源码浅析】的更多相关文章

先看一下它的继承.实现关系: public final class Integer extends Number implements Comparable<Integer> Number是个抽象类,大概包含六个抽象方法,都是用来类型转换的 具体代码如下:public abstract class Number implements java.io.Serializable { public abstract int intValue(); public abstract long longV…
1.首先Integer提供了两类工具类,包括把一个int类型转成二进等, 其实执行转换算法只有一个方法: public static String toString(int i, int radix) { if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) radix = 10; /* Use the faster version */ if (radix == 10) { return toString(i); }…
1.Long类和Integer相类似,都是基本类型的包装类,类中的方法大部分都是类似的: 关于Integer类的浅析可以参看:Integer类源码浅析 2.这里主要介绍一下LongCache类,该缓存类比Integer的缓存类,实现更简单 private static class LongCache { private LongCache(){} static final Long cache[] = new Long[-(-128) + 127 + 1]; static { for(int i…
由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) for a HashMap. Must be a power of two * greater than 1 (and less than 1 << 30). */ private static final int MINIMUM_CAPACITY = 4; /** * Max capacity…
1.首先来看一下ArrayList类中的字段 可以看出,ArrayList维护了一个Object数组,默认容量是10,size记录数组的长度: 2.ArrayList提供了三个构造器:ArrayList(int initialCapacity),ArrayList(),ArrayList(Collection<? extends E> c) 带int参数的构造是指定ArrayList的大小,无参的构造函数,Object[]初始化为一个空数组,重点来讨论接受一个Colection参数的构造器,先…
Byte 类字节,属于Number. public final class Byte extends Number implements Comparable<Byte> { /** * A constant holding the minimum value a {@code byte} can * have, -2<sup>7</sup>. */ public static final byte MIN_VALUE = -128; /** * A constant…
1.先来看一看LinkedList类的字段和构造方法 size记录链表的长度,first永远指向链表的第一个元素,last永远指向链表的最后一个元素 提供两个构造方法,一个无参的构造方法,一个接受一个Collection对象为参数的构造方法 first和last的类型都是Node,Node是LinkedList类中的一个私有的静态内部类,定义非常简单 Node类中定义了三个字段,数据域item,后继元素next,前驱元素prev,而且都是接受泛型的 2.来看第一个方法linkFirst(E e)…
1.看一个示例 运行上述代码,抛出一个异常: 这是一个典型的并发修改异常,如果把上述代码中的125行注释,把126行打开,运行就能通过了: 原因: 1)因为在迭代的时候,使用的是Itr类的对象,在调用hasNext()方法的时候,只要cursor和szie不相等就返回true: 2)在Itr类中存在一个属性字段:expectedModCount,每次调用next()方法的时候都会检查expectedModCount和modCount是否相等, 如果不相等,就会抛出异常: 3)调用Itr类的rem…
1.removeAll(Collection<?> c)和retainAll(Collection<?> c)方法 第一个是从list中删除指定的匹配的集合元素,第二个方法是用指定的集合替换list: 但是在这两方法中调用同一个batchRemove方法: 2.内部类Sublist 这个类继承自AbstractList抽象类,实现RandomAccess接口,类中的字段有 这个类中的大部分的方法都是在调用ArrayList的方法:ArrayList.this.elementData…
1.上一节介绍了LinkedList的几个基本的方法,其他方法类似,就不一一介绍: 现在再来看一个删除的方法:remove(Object o) remove方法接受一个Object参数,这里需要对参数做空与非空处理: 但是删除一个Object元素,都需要遍历整个链表,这样如果需要频繁的调用remove方法,删除的效率是非常低的: 类似的方法还有indexOf(Object o):这是根据传入的object参数来获取下标的方法: 2.根据下标来查找节点元素:node(int index) 这个查询…
ConcurrentHashMap是线程安全的.可以在多线程中对ConcurrentHashMap进行操作. 在jdk1.7中,使用的是锁分段技术Segment.数据结构是数组+链表. 对比jdk1.7,在jdk1.8中,ConcurrentHashMap主要使用了CAS(compareAndSwap).volatile.synchronized锁. 跟jdk1.8中的HashMap一样,数据结构是数组+链表+红黑树.当链表长度过长时,会转变为红黑树. jdk1.8的HashMap源码浅析,见…
前言:上 篇介绍了提供手势绘制的视图平台GestureOverlayView,但是在视图平台上绘制出的手势,是需要存储以及在必要的利用时加载取出手势.所 以,用户绘制出的一个完整的手势是需要一定的代码机制来完成存储以及必要时加载取出的:那么,在源码中Gesture这个类就是用来描述完整的手势的.一 个Gesture就是用户手指在触摸屏上绘制形成的不规则几何图形(A gesture is a hand-drawn shape on a touch screen): 一. Gesture的组成 通过…
目录 1.关键接口和类 1.1.关键类之 DefaultListableBeanFactory 1.2.关键类之XmlBeanDefinitionReader 1.3.关键类之ClassPathXmlApplicationContext 2.spring初始化过程中对外暴露的扩展接口 3.扩展点的启动顺序 spring的IOC容器初始化流程很复杂,本文只关注流程中的关键点,勾勒出主要轮廓,对容器的初始化有一个整体认识,以下基于spring的5.1.2.RELEASE分析,本文演示代码地址:htt…
1 背景 前段时间群里有伙伴问到了关于Android开发中Theme与Style的问题,当然,这类东西在网上随便一搜一大把模板,所以关于怎么用的问题我想这里也就不做太多的说明了,我们这里把重点放在理解整个Android中Theme.Style的关系及结构,这样我们就能游刃有余的面对实际开发中遇到的很多问题了,也就免得在自定义时遇到各种坑,譬如不清楚该继承哪个parent.不清楚为何背景会有一个黑边等. 本文主要分两部分来进行简单粗略的浅析,首先会围绕Theme与Style的定义及在App开发中的…
写在前面 说说这几天看源码的感受吧,其实 jdk 中的源码设计是最值得进阶学习的地方.我们在对 api 较为熟悉之后,完全可以去尝试阅读一些 jdk 源码,打开 jdk 源码后,如果你英文能力稍微过得去,那么源码有相当详细的注释告诉你 api 的含义,具体用法.假设平时在写代码的过程中突然忘记了某个 api 的用法,那么有些新手没读过源码的可能顺手就打开百度或者谷歌,搜索 api 怎么用?哈哈哈,面向谷歌编程,这样的状态可能会让你一年的经验重复n年, 如果是阅读过源码,则直接进去看看源码英文注释…
Cmd Markdown链接 CountDownLatch源码浅析 参考好文: JDK1.8源码分析之CountDownLatch(五) Java并发之CountDownLatch源码分析 CountDownLatch源码的理解 JDK API 前言 CountDownLatch用于同步一个或者多个任务,强制他们等待有其他任务执行的一组操作完成.CountDownLatch典型的用法是将一个程序分成n个相互独立的可分解任务,并创建值为n个互相独立的可分解任务,并创建值为n的CountDownLa…
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐进增强)优雅的处理能力以及 Ajax 等方面周到而强大的定制功能无不令人惊叹. 另外,阅读源码让我接触到了大量底层的知识.对原生JS .框架设计.代码优化有了全新的认识,接下来将会写一系列关于 jQuery 解析的文章. 我在 github 上关于 jQuery 源码的全文注解,感兴趣的可以围观一下…
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐进增强)优雅的处理能力以及 Ajax 等方面周到而强大的定制功能无不令人惊叹. 另外,阅读源码让我接触到了大量底层的知识.对原生JS .框架设计.代码优化有了全新的认识,接下来将会写一系列关于 jQuery 解析的文章. 我在 github 上关于 jQuery 源码的全文注解,感兴趣的可以围观一下…
ConfigurationProvider接口 主要完成struts配置文件 加载 注册过程 ConfigurationProvider接口定义 public interface ConfigurationProvider extends ContainerProvider, PackageProvider { } ContainerProvider接口定义 /** * 容器加载 注册器 */ public interface ContainerProvider { public void de…
上篇文章<HashMap其实就那么一回事儿之源码浅析>介绍了hashMap,  本次将带大家看看HashSet, HashSet其实就是基于HashMap实现, 因此,熟悉了HashMap, 再来看HashSet的源码,会觉得极其简单.下面还是直接看源码吧: public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { s…
TreeMap是基于红黑树结构实现的一种Map,要分析TreeMap的实现首先就要对红黑树有所了解.      要了解什么是红黑树,就要了解它的存在主要是为了解决什么问题,对比其他数据结构比如数组,链表,Hash表等树这种结构又有什么优点.   1.二叉查询树.红黑树介绍      以下为个人理解,有误请拍砖...        下面我尽可能用通俗易懂的语言,简单总结一下数组,链表,Hash表以及树的优缺点.      1.数组,优点:(1)随机访问效率高(根据下标查询),(2)搜索效率较高(可…
今天的主角是HashSet,Set是什么东东,当然也是一种java容器了.      现在再看到Hash心底里有没有会心一笑呢,这里不再赘述hash的概念原理等一大堆东西了(不懂得需要先回去看下HashMap了),需要在啰嗦一句的是hash表是基于快速存取的角度设计的,也是一种典型的空间换时间的做法(这个在分析HashMap中都有讲过).那么今天的HashSet它又是怎么一回事的,他的存在又是为了解决什么问题呢?      先来看下Set的特点:Set元素无顺序,且元素不可以重复. .想到了什么…
前面分析了HashMap的实现,我们知道其底层数据存储是一个hash表(数组+单向链表).接下来我们看一下另一个LinkedHashMap,它是HashMap的一个子类,他在HashMap的基础上维持了一个双向链表(hash表+双向链表),在遍历的时候可以使用插入顺序(先进先出,类似于FIFO),或者是最近最少使用(LRU)的顺序.      来具体看下LinkedHashMap的实现.       1.定义  public class LinkedHashMap<K,V> extends H…
前面了解了jdk容器中的两种List,回忆一下怎么从list中取值(也就是做查询),是通过index索引位置对不对,由于存入list的元素时安装插入顺序存储的,所以index索引也就是插入的次序. Map呢是这样一种容器,它可以存储两个元素键和值,根据键这个关键字可以明确且唯一的查出一个值,这个过程很像查字典,考虑一下使用什么样的数据结构才能实现这种效果呢?   1.自己实现一个Map        先来看一下jdk中map的定义:      public interface Map<K,V>…
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐进增强)优雅的处理能力以及 Ajax 等方面周到而强大的定制功能无不令人惊叹. 另外,阅读源码让我接触到了大量底层的知识.对原生JS .框架设计.代码优化有了全新的认识,接下来将会写一系列关于 jQuery 解析的文章. 我在 github 上关于 jQuery 源码的全文注解,感兴趣的可以围观一下…
=========================================== 原文链接: spring源码浅析--IOC   转载请注明出处! =========================================== 在读之前应该明白其重点:读spring读的不是其具体的技术实现,读的是其系统层面的结构和设计! spring漂亮就漂亮在她的结构,包括接口和抽象类的灵活使用! IOC模块只是spring框架中的一个模块,这里只对该模块进行分析(使用版本:spring-fra…
目录 1.引子 2.JVM线程状态 3.Thread常用方法 4.拓展点 一.引子 说来也有些汗颜,搞了几年java,忽然发现竟然没拜读过java.lang.Thread类源码,这次特地拿出来晒一晒.本文将剖析Thread类源码(本文后面源码全部默认JDK8),并讲解一些重要的拓展点.希望对大家能有一些帮助. 本文讲解主干全部出自源码和注释,保证了权威性.(注意:网上,某些书中很多观点都是错的,过时的,片面的,所以大家一定要看源码,重要事情说N遍,看源码!看源码!看源码......) 二.JVM…
在之前的文章中我也曾经介绍过Lock,像ReentrantLock(可重入锁)和ReentrantReadWriteLock(可重入读写锁),这些所我们在说的时候并没有详细的说明它们的原理,仅仅说明了它们的用法,今天我们就来看一看Java中Lock底层的原理,下一篇文章将分析ReentrantLock和ReentrantReadWriteLock! 以下大概就是我们本篇文章的内容: Lock的方法摘要 队列同步器 自定义同步组件(类似ReentrantLock的简单结构) 同步器队列的实现 三种…
Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在IDE中调试Android程序,说白了就是debug工具.adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行And…
Android源码浅析(二)--Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境 接着上篇,上片主要是介绍了一些安装工具的小知识点Android源码浅析(一)--VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置,其实Ubuntu Kylin 16.04 LTS也只是为了体验,我们为了追求稳定,还是使用了Ubuntu14.04 这里提供一个国内镜像的下载链接,可以用迅雷,下载下来之后后缀…