Java源码阅读LinkedHashMap】的更多相关文章

1类签名与注释 public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> 哈希表和链表实现的Map接口,具有可预测的迭代次序. 这种实现不同于HashMap,它维持于所有entrys的双向链表. 此类提供了所有可选的Map操作,并允许空元素. 像HashMap,它提供了基本操作(add,contains和remove)稳定的性能. 性能可能略低于HashMap ,这是由于维护链表的额…
Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的源码很漂亮,但我绝不建议你一开始就读…
Java源码阅读的真实体会(一种学习思路)   刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的源码很漂亮,但我绝不建议你一开始…
刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心.   说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的源码很漂亮,但我绝不建议你一开始就读它.我文中会专门谈到这个,暂时不展开.…
收藏自http://www.iteye.com/topic/1113732 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的源码…
1类签名与注释 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable 该类实现了一个哈希表,它将键映射到值. 任何非null对象都可以用作键值或值. 为了从散列表成功存储和检索对象,用作键的对象必须实现hashCode方法和equals方法. 与HashMap类似,两个影响Hashtable性能的参数: 初始容量和负…
Stack(栈)实现了一个后进先出(LIFO)的数据结构.该类继承了Vector类,是通过调用父类Vector的方法实现基本操作的. Stack共有以下五个操作: put:将元素压入栈顶. pop:弹出栈顶元素(返回栈顶元素,并删除). peek:取栈顶元素(不删除). empty:判断栈是否为空. search:搜索一个元素是否在栈里,并返回其到栈顶的距离. public class Stack<E> extends Vector<E> { public Stack() { }…
一.前言 在上一篇随笔中,我们分析了HashMap的源码,里面涉及到了3个钩子函数,用来预设给子类--LinkedHashMap的调用,所以趁热打铁,今天我们来一起看一下它的源码吧. 二.LinkedHashMap的结构与继承关系 2.1 LinkedHashMap的数据结构 可以从上图中看到,LinkedHashMap数据结构相比较于HashMap来说,添加了双向指针,分别指向前一个节点--before和后一个节点--after,从而将所有的节点已链表的形式串联一起来,从名字上来看Linked…
阅读顺序参考链接:https://blog.csdn.net/qq_21033663/article/details/79571506 阅读源码:JDK 8 计划阅读的package: 1.java.lang 2.java.util 3.java.util.concurrent 4.java.util.concurrent.atomic…
1类签名与简介 public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable LinkedBlockingQueue是Java并发包的成员,该类基于链表实现了阻塞队列. 基于链表的队列通常比基于数组的队列有更高的吞吐量,但是在大多数并发程序中可预测性能较低.(本质是理解链表和数组各自的性能优势) LinkedBl…
1类签名与简介 public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable 一个有限的阻塞队列由数组支持. 这个队列排列元素FIFO(先进先出).新元素插入队列的尾部,队列检索操作获取队列头部的元素. ArrayBlockingQueue是线程安全的,其内部通过“互斥锁”(Lock)保护竞争资源,实现了多线程对竞…
1类签名与注释 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable HashMap是基于哈希表实现的Map接口. 此实现提供了所有可选的地图操作,并允许null的值和null键. ( HashMap类大致相当于Hashtable ,除了它是不同步的,并允许null).该类不能保证map的顺序,特别是,它不能保证顺序在一段时间内保持不…
1简介 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable ArrayList使用一个可变数组实现List接口,实现了List接口的所有可选操作.ArrayList除了是非线程安全的之外,其他的与Vector类似. 2成员属性 //序列化版本号 private static final lon…
目录 1.LinkedHashMap的内部结构 2.LinkedHashMap构造函数 3.元素新增策略 4.元素删除 5.元素修改和查找 6.特殊操作 7.扩容 8.总结 1.LinkedHashMap的内部结构 对象的内部结构其实就是hashmap的内部结构,但是比hashmap的内部结构node要多维护2个引用指针,用来做前置和后置链表 同事linkedhashmap本身还有头链表节点和尾部链表节点 static class Entry<K,V> extends MyHashMap.No…
public final class Integer extends Number implements Comparable<Integer> Integer 由final修饰了,所以该类不能够被继承,同时 Integer 继承了Number类,因此可以将Integer转换成 int .double.float.long.byte和short类型的数据,另外,也实现了comparable接口,因此Integer类也可以进行自然排序. 构造方法只有两个: public Integer(int…
1 类注释 Class {@code Object} is the root of the class hierarchy. Every class has {@code Object} as a superclass. All objects, including arrays, implement the methods of this class. Object类是类层次结构的根,是每一个类的父类.所有的对象(包括数组)都是实现了object类的方法. 2 outline(大纲) outl…
1类签名与注释 public final class String implements java.io.Serializable, Comparable<String>, CharSequence String类被定义为final类型的,所以String对象一旦创建了,就是不可变的. String类实现了Serializable接口,表示可以序列化. String类实现了Comparable<String>接口,表示String类型可以相互比较.(通过compareTo方法) S…
1类签名与注释 public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable Vector类实现了一个可伸缩的对象数组.和数组一样,他里面的组件能被integer型的索引访问.不同的是,Vector被创建后,当增加或删除项的时候,其size可以增长或收缩来适应大小. 每个Vector都试图通过保持capaci…
先盗两张图感受一下(来自:https://blog.csdn.net/justloveyou_/article/details/71713781) HashMap和双向链表的密切配合和分工合作造就了LinkedHashMap.特别需要注意的是,next用于维护HashMap各个桶中的Entry链,before.after用于维护LinkedHashMap的双向链表,虽然它们的作用对象都是Entry,但是各自分离,是两码事儿. 源码分析 1.LinkedHashMap的继承结构 public cl…
基于jdk1.8的ArrayList源码分析. 实现List接口最常见的大概就四种,ArrayList, LinkedList, Vector, Stack实现,今天就着重看一下ArrayList的源码实现.ArrayList的底层结构就是最简单的数组,数据结构导致了它查询快,但是增删慢.另外官方也说了,ArrayList是线程不同步的.我觉得我有必贴一下官方文档的描述. Resizable-array implementation of the List interface. Implemen…
1类签名与注解 public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable 此类实现Set接口,由哈希表(实际为HashMap实例)支持. 对集合的迭代次序不作任何保证.特别是,它不能保证顺序在一段时间内保持不变(HashMap的扩容重hash). 这个类允许null元素. 请注意,此实现不同步. 如果多个线程并发访问哈希集,并且至少有…
java.util.LinkedList LinkedList是实现了List接口的双链表实现,拥有list的所有方法并且允许所有元素(包括null). 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.一般我们都构造双向循环链表. 需要注意的是LinkedList是非同步的,当大量线程并发地访问链表时,当至少有一个线程修改了列表的结构,那它必须进行外部同步(结构修改指的是…
1类签名和简介 package java.util; public class Observable Observable是Java内置的观察者模式中的主题类(没错,是类不是接口),和其对应的观察者接口是Observer,观察者模式是JDK中使用最多的模式之一. 观察者模式定义了对象之间的一对多的关系,这样一来,当一个对象(主题)改变状态时,它的所有依赖者(观察者)都会收到通知并自动更新. Observable内部使用Vector来存储注册的观察者实例,是线程安全的. 注意:jdk将Observ…
1类签名与简介 public class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Serializable PriorityQueue是一个基于优先级堆的无限队列,无限的意思是说队列的容量可以自动扩容,最大容量为整形最大值.扩容规定如下当容量小于64时扩大为原来的2倍,否则扩大为原来的1.5倍(也就是容量增大50%). 优先级队列不允许null元素,也不允许插入不可比较的对象.不可比较是指待插入对象的…
1类签名与注释 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable 双向链表实现了List和Deque接口. 实现所有可选列表操作,并允许所有元素(包括null ). 请注意,此实现不同步. 如果多个线程同时访问链接列表,并且至少有一个线程在结构上修改列表,则必须在外…
1类签名与注释 public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence 一个可变的字符序列. 此类提供与StringBuffer相同的API,但不保证同步.在单线程中应该优先使用StringBuilder,因为它不需要同步,在大多数实现中将更快. StringBuilder的主要实现是append与insert方法,他们是重载的,以便接…
1类签名与注释 public final class System System类包含一些有用的类属性和方法.该类不能被实例化,所以其所有属性与方法都是static的. 2标准输入输出流 public final static InputStream in = null; public final static PrintStream out = null; 标准输入输出流会在initializeSystemClass方法中被初始化. (1)控制台输入输出1 Scanner in = new S…
一.前言 ​ 万丈高楼平地起,相信要想学好java,仅仅掌握基础的语法是远远不够的,从今天起,笔者将和园友们一起阅读jdk1.8的源码,并将阅读重点放在常见的诸如collection集合以及concurrent并发两块,另外笔者自己也是摸着石头过河,如果有描述不当的地方,希望园友们能够不吝指出,希望能够和大家共同进步! 二.jdk1.8新特性简述 ​ 相较于之前的jdk版本,jdk1.8加入了很多新特性,诸如Lambda表达式,函数式接口,时间的处理类等新特性,值得一提的是可以在Interfac…
Java 源码阅读的第一步是Collection框架源码,这也是面试基础中的基础: 针对Collection的源码阅读写一个系列的文章,本文是第三篇ArrayDeque. ---@pdai JDK版本 JDK 1.8.0_110 概述总结 ArrayDeque是可变长Array, 实现了Deque接口:Deque是"double ended queue", 表示双向的队列,英文读作"deck": Deque 继承自 Queue接口,除了支持Queue的方法之外,还支…
Java 源码阅读的第一步是Collection框架源码,这也是面试基础中的基础: 针对Collection的源码阅读写一个系列的文章; 本文是第二篇LinkedList. ---@pdai JDK版本 JDK 1.8.0_110 概述总结 LinkedList底层是通过双向链表实现的,具体是first和last两个node元素: 链表的特性决定了LinkedList按照index查找元素的效率没有ArrayList高,但是add和remove操作效率会高很多: 根据index查找node, 因…