LinkedList定义 LinkedList 是链表实现的线性表(双链表),元素有序且可以重复. public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable 蓝色实线箭头是指Class继承关系 绿色实线箭头是指interface继承关系 绿色虚线箭头是指接口实现关系 由…
一点一点看JDK源码(二)java.util.List liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 List译为表,一览表,列表,目录,名单,有种index的意味在里头 编程语言中的List是强调线性,可以简单的视为一个双向串行的集合 List的特色是在结婚的任何位置增加或 删除元素都比较快,本身并不只是随机存取. 同时,List是众多语言中都提供的常用类库之一. java.util.List是一个接口,该接口继承了Co…
一点一点看JDK源码(六)java.util.LinkedList前篇之链表概要 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.什么是链表 链表是一种常见的数据结构,属于一种线性表. 虽说链表是线性表,但是其储存的方式并非是线性的,而是节点(Node)方式存储的. 每一个节点都含有一个指针,指向下一个节点. 同时每一个节点都存有自身的数据信息. 链表有点像衣服的拉链,是一个扣一个的,每两个之间都有一个间隔,要想获取某个位置的数据…
一点一点看JDK源码(三)java.util.ArrayList liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 ArrayList是一个容量不固定的容器,为单列,有序集合,容量可扩容,扩容系数为1.5 有最大值,一般达不到. ArrayList是线程不安全的,其扩容发生于集合修改的时候,如add,addAll等 ArrayList底层使用的是Object数组,初始化内容为10个容量的元素 使用ArrayList的时候,几种…
一点一点看JDK源码(四)java.util.ArrayList 中篇 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 在前篇中,对于java.util.ArrayList进行了一些源码注释,能坚持看完的估计都是神一般的存在. 不过看源码并需要一个艰苦的过程,枯燥是很正常的. 但是不是要一直都很枯燥,本文将对此类进行分类解析. 2.关注点 2.0.ArrayList是如何构成的? 在java中,一个类的构成并不是十分复杂,列…
一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代码比较简单 ArrayList的forEach方法需要实现Consumer接口,实现其未实现的方法即可 该方法返回值为void,实际上就是任意写的了,代码如下: package com.FM.ArrayListStudy; import java.util.ArrayList; import jav…
一点一点看JDK源码(五)java.util.ArrayList 后篇之sort与Comparator liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) Comparator为额外实现的比较接口,与类本身无关 该接口在ArrayList的sort中有应用(很多时候都可以用的,只是以此举例) Comparator接口主要用途有两种, 1.比较有序集合内任意两个元素A.B(完全遍历的compareTo方法,于compare方法内实现) 若A…
一点一点看JDK源码(五)java.util.ArrayList 后篇之SubList liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) SubList可以将一个数组根据index拆分为多个数组,使用多线程对于数组进行遍历 未使用多线程的代码比较简单,代码示例如下: package com.FM.ArrayListStudy; import java.util.ArrayList; import java.util.List; publ…
一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) Spliterator为jdk1.8新增接口,由ArrayList.spliterator();获得其返回值对象Spliterator. 该对象可以使用trySplit进行迭代器拆分,每次拆分后的迭代器接近上一次的二分之一. 这是官方对于大数据量数组多线程遍历加工的一种趋势性指引.…
一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) Predicate为jdk1.8新增接口,由ArrayList.removeIf(Predicatep)调用. 使用起来也比较方便,从ArrayList中移除Predicate 中test方法的返回值(boolean)来确定是否删除, 示例代码如下: package com.FM…
一点一点看JDK源码(〇) liuyuhang原创,未经允许进制转载 写在前面: 几乎所有的大神都会强调看源码,也强调源码的重要性: 但是如何看源码,源码看什么?看了什么用?看了怎么用? 困扰很多人,尤其是初学者. 本系列的目的在于看源码,并非学习和总结源码,先能够粗略的浏览大量的原码 并保证知晓有这么个东西,有个基本概念,再对其中的设计原理,优化方案进行学习 本文简单的回答以下几个问题: 1.为什么要看源码? 2.什么时候或什么条件下看源码? 3.看源码看什么? 4.看源码有什么用? 5.源码…
一点一点看JDK源码(一)Collection体系概览 liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 Collection为集合类,是jdk中最为常用的类了,实际上我并不认同这个东西叫做集合 我更倾向于叫做容器,当然容器不止有它一种. 在计算机专业中,大概都会学一门叫做<数据结构>的课程吧 本质上来说,数据结构,实际上是设计一种容器,而容器的特性大体包括如下: 容器中如何进行存储 容器中的数据如何获取 容器中的数据如何添…
java.util.Arrays 源码分析 --------------------------------------------------------------------------------- java.util.Arrays是一个工具类,它的定义如下: public class Arrays { //Sorting of primitive type arrays. // Searching // Equality Testing // Filling // Cloning //…
关于 JDK 的集合类的整体介绍可以看这张图,本篇博客我们不系统的介绍整个集合的构造,重点是介绍 ArrayList 类是如何实现的. 1.ArrayList 定义 ArrayList 是一个用数组实现的集合,支持随机访问,元素有序且可以重复. public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializabl…
 java.util.Collection<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.Collection<E>是一个接口,它的定义如下: public interface Collection<E> extends Iterable<E> { // Query Operations /…
JDK1.8源码(五)--java.lang. https://www.cnblogs.com/IT-CPC/p/10897559.html…
一.初识 1.介绍 int 是Java八大基本数据类型之一,占据 4 个字节,范围是 -2^31~2^31 - 1,即 -2147483648~2147483647.而 Integer 是 int 包装类. Integer 是类,默认值为null:int是基本数据类型,默认值为0. Integer 表示的是对象,用一个引用指向这个对象,而 int 是基本数据类型,直接存储数值. 二.自动装箱和拆箱 1.案例 先看如下代码执行结果: 1 int i1 = 59; 2 3 Integer i2 =…
上一篇博客我们介绍了 java.lang 包下的 Object 类,那么本篇博客接着介绍该包下的另一个类 Integer.在前面 浅谈 Integer 类 博客中我们主要介绍了 Integer 类 和 int 基本数据类型的关系,本篇博客是从源码层次详细介绍 Integer 的实现. 1.Integer 的声明 public final class Integer extends Number implements Comparable<Integer>{} Integer 是用 final…
背景 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. (2)一个线程持有锁会导致其它所有需要此锁的线程挂起. (3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险. volatile是不错的机制,但是volatile不能保证原子性.因此对于同步最终还是要回到锁机制上来. 关于CAS 一种无锁机制,比较并交换, 操作包…
本篇博客我们来介绍在 JDK1.8 中 HashMap 的源码实现,这也是最常用的一个集合.但是在介绍 HashMap 之前,我们先介绍什么是 Hash表. 1.哈希表 Hash表也称为散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构.也就是说它通过把关键码值映射到表中的一个位置来访问记录,以此来加快查找的速度.在链表.数组等数据结构中,查找某个关键字,通常要遍历整个数据结构,也就是O(N)的时间级,但是对于哈希表来说,只是O(1)的时间…
java.util.AbstractCollection<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.AbstractCollection<E>是一个抽象类,它的定义如下: public abstract class AbstractCollection<E> implements Collectio…
java.util.AbstractList<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.AbstractList<E>是一个抽象类,它的定义如下: public abstract class AbstractList<E> extends AbstractCollection<E> im…
java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 1.asList public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } 作用是返回由指定数组支持的固定大小列表. 注意:这个方法返回的 ArrayList 不是我们常用的集合类 java.util.ArrayList.这里的 A…
一.概述 1.介绍 Arrays 类是 JDK1.2 提供的一个工具类,提供处理数组的各种方法,基本上都是静态方法,能直接通过类名Arrays调用. 二.类源码 1.asList()方法 将一个泛型数组转化为List集合返回.但是,这个List集合既不是ArrayList实例,也不是Vector实例.它是一个固定长度的 List 集合,是 Arrays 的一个内部类 java.util.Arrays.ArrayList. 代码示例:使用 1 public class Main { 2 publi…
准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.java.util.concurrent.atomic,正如它的英文意思一样,是一个线程安全.原子操作相关的包 另一个专门为线程安全设计的Java包,包含多个原子操作类.这个包里面提供了一组原子变量类.其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程…
前面我们介绍了 Map 集合的一种典型实现 HashMap ,关于 HashMap 的特性,我们再来复习一遍: ①.基于JDK1.8的HashMap是由数组+链表+红黑树组成,相对于早期版本的 JDK HashMap 实现,新增了红黑树作为底层数据结构,在数据量较大且哈希碰撞较多时,能够极大的增加检索的效率. ②.允许 key 和 value 都为 null.key 重复会被覆盖,value 允许重复. ③.非线程安全 ④.无序(遍历HashMap得到元素的顺序不是按照插入的顺序) HashMa…
在前面几篇博客分别介绍了这样几种集合,基于数组实现的ArrayList 类,基于链表实现的LinkedList 类,基于散列表实现的HashMap 类,本篇博客我们来介绍另一种数据类型,基于树实现的TreeSet类. 1.TreeMap 定义 听名字就知道,TreeMap 是由Tree 和 Map 集合有关的,没错,TreeMap 是由红黑树实现的有序的 key-value 集合. PS:想要学懂TreeMap的实现原理,红黑树的了解是必不可少的!!! public class TreeMap<…
java.util.List<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.List<E>是一个接口,它的定义如下: public interface List<E> extends Collection<E> { // Query Operations // Modification Op…
java.util.Iterator<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.Iterator<E>是一个接口,它的定义如下: public interface Iterator<E> { boolean hasNext(); E next(); void remove(); } (1)java.…
java.util.ListIterator<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.ListIterator<E>是一个接口,它的定义如下: package java.util; public interface ListIterator<E> extends Iterator<E>…