【Java集合加源码分析】教程文章相关的互联网学习教程文章

Java集合源码分析(一)ArrayList【代码】【图】

Java集合源码分析(一)ArrayList ?阅读目录(Content) 一、ArrayList简介1.1、ArrayList概述 1.2、ArrayList的数据结构二、ArrayList源码分析2.1、继承结构和层次关系 2.2、类中的属性 2.3、构造方法 2.4、核心方法2.4.1、add()方法(有四个)2.4.2、删除方法2.4.3、set()方法2.4.4、indexOf()方法2.4.5、get()方法三、总结  前言在前面的学习集合中只是介绍了集合的相关用法,我们想要更深入的去了解集合那就要通过我们去分析它的...

Java ArrayList相关方法介绍及源码分析【代码】

ArrayList简介: java.util.ArrayList 是我们最常用的一个类,ArrayList 底层是动态数组,读者可以把它理解为数组的实现 public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable{}如上代码我们可以看到 ArrayList 继承了 AbstractList() 抽象类,并实现了 List, RandomAccess, Cloneable, Serializable 接口 AbstractList : public abstract class AbstractList<E>...

JAVA类集源码分析和实现——Map【代码】

HashMap底层结构是哈希表,使用数组+链表的方式;同一个链表存储地址是一样的; 链表的每一个结点是一个Entry对象,四个部分:hash、key、value、next 添加元素,不是添加到链表的后面,面是添加到链表前面 哈希表的优点:添加快,查询也快(通过计算得到存储位置,不是通过比较)、无序的、key唯一 关键参数:默认主数组长度为:16?默认装填因子为0.75?每次主数组扩容为原来的2倍、JDK1.8当链表长度大于8,链表变成红黑树; 手写Hash...

Java集合ArrayList数组实现原理及源码分析详解_一点课堂(多岸学院)【代码】【图】

arraylist源码分析数组介绍 数组是数据结构中很基本的结构,很多编程语言都内置数组。 在java中当创建数组时会在内存中划分出一块连续的内存,然后当有数据进入的时候会将数据按顺序的存储在这块连续的内存中。当需要读取数组中的数据时,需要提供数组中的索引,然后数组根据索引将内存中的数据取出来,返回给读取程序。在Java中并不是所有的数据都能存储到数组中,只有相同类型的数据才可以一起存储到数组中。因为数组在存储数据时...

死磕 java并发包之AtomicStampedReference源码分析(ABA问题详解)【图】

问题 (1)什么是ABA? (2)ABA的危害? (3)ABA的解决方法? (4)AtomicStampedReference是什么? (5)AtomicStampedReference是怎么解决ABA的? 简介 AtomicStampedReference是java并发包下提供的一个原子类,它能解决其它原子类无法解决的ABA问题。 ABA ABA问题发生在多线程环境中,当某线程连续读取同一块内存地址两次,两次得到的值一样,它简单地认为“此内存地址的值并没有被修改过”,然而,同时可能存在另一个线程在这...

Java并发之AQS源码分析(二)【代码】【图】

我在Java并发之AQS源码分析(一)这篇文章中,从源码的角度深度剖析了 AQS 独占锁模式下的获取锁与释放锁的逻辑,如果你把这部分搞明白了,再看共享锁的实现原理,思路就会清晰很多。下面我们继续从源码中窥探共享锁的实现原理。 共享锁 获取锁 public final void acquireShared(int arg) {// 尝试获取共享锁,小于0表示获取失败if (tryAcquireShared(arg) < 0)// 执行获取锁失败的逻辑doAcquireShared(arg); } 这里的 tryAcquireS...

Dagger2源码分析(二):Java无所不能的反射在Android中需要熟练的知识【图】

前言提起hook概念,相信大家都听说过,然后hook就是将反射和动态代理运用于Android平台源码之上的。可是,反射的应用场景缺非常广泛,注解的内容也同样需要使用反射去获取,所以反射是我们Android开发者必须要学习的知识。反射什么是反射?反射 (Reflection) 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性简而言之,通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员...

Dagger2源码分析(一):Java注解在Android中必须学习的细节知识【图】

前言对于注解,相信大家都不陌生了,但是这种熟悉对于Android开发者来说,也就是仅仅是它认识你,你不认识它吧,因为,我们几乎都停留在用上了。像dagger2,像retrofit,像greenDao,他们都是满满的使用了注解,而我们只是停留在知其然缺不知其所以然的层面,那么我本次分享讲分成几批博客共享给大家一个体系的又不失针对Android平台需要的恰到好处的给大家整理真正需要掌握的知识体系。注解注解的定义Java 注解用于为 Java 代码提...

死磕 java集合之LinkedList源码分析【图】

问题 (1)LinkedList只是一个List吗? (2)LinkedList还有其它什么特性吗? (3)LinkedList为啥经常拿出来跟ArrayList比较? (4)我为什么把LinkedList放在最后一章来讲? 简介 LinkedList是一个以双向链表实现的List,它除了作为List使用,还可以作为队列或者栈来使用,它是怎么实现的呢?让我们一起来学习吧。 继承体系通过继承体系,我们可以看到LinkedList不仅实现了List接口,还实现了Queue和Deque接口,所以它既能作为Li...

Java学习篇之容器篇(进阶&源码分析)【图】

一、概括: 在java中,由于数组长度固定,在实际开发中用到的并不多;为了解决数组长度固定的缺陷,在JDK1,2开始,java中提供了集合框架(容器)来解决这一问题。简单来说,java集合框架实际上就是一种数据结构,用来存放数量不固定的元素。java类集框架中提供了两个最为核心的接口,Collection 和 Map Collection :和单链表类似,每一次操作的都是单个元素Map :每次操作的都是一对键值对(key = value)二、Collection集合 2....

Java8 ThreadLocal 源码分析【代码】【图】

可参考文章: Java8 IdentityhashMap 源码分析 IdentityhashMap 与 ThreadLocalMap 一样都是采用线性探测法解决哈希冲突,有兴趣的可以先了解下 IdentityhashMap 。 一、ThreadLocal 简介 在学习源码之前,有一个概念我们需要先明白:ThreadLocal 可以使多线程间数据读写隔离,因此 ThreadLocal 解决的是线程局部变量安全性问题,并不是多线程间共享变量安全性问题。 ThreadLocal 在使用时必须先初始化 value,否则会报空指针异常,...

死磕 java集合之DelayQueue源码分析【图】

问题 (1)DelayQueue是阻塞队列吗? (2)DelayQueue的实现方式? (3)DelayQueue主要用于什么场景? 简介 DelayQueue是java并发包下的延时阻塞队列,常用于实现定时任务。 继承体系从继承体系可以看到,DelayQueue实现了BlockingQueue,所以它是一个阻塞队列。 另外,DelayQueue还组合了一个叫做Delayed的接口,DelayQueue中存储的所有元素必须实现Delayed接口。 那么,Delayed是什么呢? public interface Delayed extends Com...

死磕 java集合之LinkedTransferQueue源码分析【图】

问题 (1)LinkedTransferQueue是什么东东? (2)LinkedTransferQueue是怎么实现阻塞队列的? (3)LinkedTransferQueue是怎么控制并发安全的? (4)LinkedTransferQueue与SynchronousQueue有什么异同? 简介 LinkedTransferQueue是LinkedBlockingQueue、SynchronousQueue(公平模式)、ConcurrentLinkedQueue三者的集合体,它综合了这三者的方法,并且提供了更加高效的实现方式。 继承体系LinkedTransferQueue实现了TransferQue...

Java容器类源码分析之Iterator与ListIterator迭代器(基于JDK8)【图】

一、基本概念 迭代器是一个对象,也是一种设计模式,Java有两个用来实实现迭代器的接口,分别是Iterator接口和继承自Iterator的ListIterator接口。实现迭代器接口的类的对象有遍历集合对象,选择集合中的元素和删除集合中元素的方法。而在使用它时不必知道该集合对象底层的结构。Java类库中实现Iterator接口的迭代器只能正向遍历集合中的元素,而实现ListIterator接口的迭代器不仅能够正向遍历,还能够反向遍历集合中的元素。...

死磕 java集合之ArrayBlockingQueue源码分析【代码】

问题 (1)ArrayBlockingQueue的实现方式? (2)ArrayBlockingQueue是否需要扩容? (3)ArrayBlockingQueue有什么缺点? 简介 ArrayBlockingQueue是java并发包下一个以数组实现的阻塞队列,它是线程安全的,至于是否需要扩容,请看下面的分析。 队列 队列,是一种线性表,它的特点是先进先出,又叫FIFO,就像我们平常排队一样,先到先得,即先进入队列的人先出队。 源码分析 主要属性 // 使用数组存储元素 final Object[] items;...