【java源码分析-基本类型和包装类】教程文章相关的互联网学习教程文章

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

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

死磕 java集合之ArrayBlockingQueue源码分析

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

java集合中的HashMap源码分析【代码】

1.hashMap中的成员分析 transient Node<K,V>[] table; //为hash桶的数量 /*** The number of key-value mappings contained in this map.*/transient int size; //hashMap中键值对的数量/*** The number of times this HashMap has been structurally modified* Structural modifications are those that change the number of mappings in* the HashMap or otherwise modify its internal structure (e.g.,* rehash). ...

Java线程池ThreadPoolExecutor源码分析【代码】

ThreadPoolExecutor是jdk内置线程池的一个实现,基本上大部分情况都会使用这个线程池完成各项操作。 本文分析ThreadPoolExecutor的实现原理。 ThreadPoolExecutor的状态和属性 ThreadPoolExecutor的属性在之前的一篇java内置的线程池笔记文章中解释过了,本文不再解释。 ThreadPoolExecutor线程池有5个状态,分别是: RUNNING:可以接受新的任务,也可以处理阻塞队列里的任务 SHUTDOWN:不接受新的任务,但是可以处理阻塞队列里的任...

死磕 java集合之ConcurrentSkipListSet源码分析——Set大汇总

问题 (1)ConcurrentSkipListSet的底层是ConcurrentSkipListMap吗? (2)ConcurrentSkipListSet是线程安全的吗? (3)ConcurrentSkipListSet是有序的吗? (4)ConcurrentSkipListSet和之前讲的Set有何不同? 简介 ConcurrentSkipListSet底层是通过ConcurrentNavigableMap来实现的,它是一个有序的线程安全的集合。 源码分析 它的源码比较简单,跟通过Map实现的Set基本是一致,只是多了一些取最近的元素的方法。 为了保持专栏的...

死磕 java集合之ConcurrentSkipListSet源码分析——Set大汇总【代码】

问题 (1)ConcurrentSkipListSet的底层是ConcurrentSkipListMap吗? (2)ConcurrentSkipListSet是线程安全的吗? (3)ConcurrentSkipListSet是有序的吗? (4)ConcurrentSkipListSet和之前讲的Set有何不同? 简介 ConcurrentSkipListSet底层是通过ConcurrentNavigableMap来实现的,它是一个有序的线程安全的集合。 源码分析 它的源码比较简单,跟通过Map实现的Set基本是一致,只是多了一些取最近的元素的方法。 为了保持专栏的...

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

ThreadLocal内部是用一张哈希表来存储: 1 static class ThreadLocalMap {2 static class Entry extends WeakReference<ThreadLocal<?>> {3 /** The value associated with this ThreadLocal. */4 Object value;5 6 Entry(ThreadLocal<?> k, Object v) {7 super(k);8 value = v;9 } 10 } 11 private static final int INITIAL_CAPAC...

死磕 java集合之HashSet源码分析

问题 (1)集合(Collection)和集合(Set)有什么区别? (2)HashSet怎么保证添加元素不重复? (3)HashSet是否允许null元素? (4)HashSet是有序的吗? (5)HashSet是同步的吗? (6)什么是fail-fast? “我自己是一名老程序员,辞职目前在做讲师,今年我整理了一份适合2019年学习的J a v a干货,从最基础的面向对象到各种框架都有整理,送给每一位初学和进阶中想学Ja va编程的小伙伴。" 加QQ君羊:69769,9179(招募中) 简...

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

问题 (1)集合(Collection)和集合(Set)有什么区别? (2)HashSet怎么保证添加元素不重复? (3)HashSet是否允许null元素? (4)HashSet是有序的吗? (5)HashSet是同步的吗? (6)什么是fail-fast? 简介 集合,这个概念有点模糊。 广义上来讲,java中的集合是指java.util包下面的容器类,包括和Collection及Map相关的所有类。 中义上来讲,我们一般说集合特指java集合中的Collection相关的类,不包含Map相关的类。 狭义...

死磕 java集合之ConcurrentSkipListMap源码分析——发现个bug【图】

前情提要 点击链接查看“跳表”详细介绍。 拜托,面试别再问我跳表了! 简介 跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。 跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。 跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。 存储结构 跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。源码分析 主要内部类 内部类跟存储结构结合着来看,大概能预测到...

【Java入门提高篇】Day21 容器类详解(四)ArrayList源码分析【图】

今天要介绍的是List接口中最常用的实现类——ArrayList,本篇的源码分析基于JDK8,如果有不一致的地方,可先切换到JDK8后再进行操作。 本篇的内容主要包括这几块: 1.源码结构介绍 2.源代码展示 3.要点说明 4.优缺点说明 一、源码结构介绍ArrayList的源码跟之前的接口源码比起来,那可就不能同日而语了,一千多行代码,如果直接看的话确实有些费劲,但仔细看看就会发现,其实大致结构是这样的: 其中包含了好四个内部类: ...

java多线程——线程池源码分析(一)【图】

本文首发于cdream的个人博客,点击获得更好的阅读体验! 欢迎转载,转载请注明出处。通常应用多线程技术时,我们并不会直接创建一个线程,因为系统启动一个新线程的成本是比较高的,涉及与操作系统的交互,而是使用线程池来对线程进行管理,尤其是有很多生命周期很短的线程,线程池会显著提升多线程程序的性能。 本文主要对线程池的源码进行分析,了解了源码,我们才能够更高效的使用线程池,同时出现异常时也能更容易的进行排查。...

Java 集合系列(四)—— ListIterator 源码分析【代码】

以脑图的形式来展示Java集合知识,让零碎知识点形成体系 Iterator 对比 ??Iterator(迭代器)是一种设计模式,是一个对象,用于遍历集合中的所有元素。??Iterator 包含四个方法,分别是:next()、hasNext()、remove()、forEachRemaining(Consumer<? super E> action) ??Collection 接口继承 java.lang.Iterable,因此所有 Collection 实现类都拥有 Iterator 迭代能力。??逆向思考,Iterable 面向众多的 Collection 类型实现类,定义...

死磕 java集合之TreeMap源码分析(二)【代码】

插入元素 插入元素,如果元素在树中存在,则替换value;如果元素不存在,则插入到对应的位置,再平衡树。 public V put(K key, V value) {Entry<K,V> t = root;if (t == null) {// 如果没有根节点,直接插入到根节点compare(key, key); // type (and possibly null) checkroot = new Entry<>(key, value, null);size = 1;modCount++;return null;}// key比较的结果int cmp;// 用来寻找待插入节点的父节点Entry<K,V> parent;// 根据...

【thinking in java】ArrayList源码分析【图】

简介ArrayList底层是数组实现的,可以自增扩容的数组,此外它是非线程安全的,一般多用于单线程环境下(Vector是线程安全的,所以ArrayList 性能相对Vector 会好些) ArrayList继承了AbstractList,实现了List接口1. 实现了Serializable接口,因此它支持序列化,能够通过序列化传输(实际上java类库中的大部分类都是实现了这个接口的)2. 实现了RandomAccess接口,支持快速随机访问(只是个标注接口,没有实际的方法),这里主要表现...