Java集合类源码分析
文章平均质量分 62
Collection,Map接口及主要实现子类源码分析,笼统了解始终只能半瓶子晃荡,细抠原理方能奠定基础。不积跬步,无以至千里,每日寸进,方能达到技术之巅,共勉,打工技术人。
yunzhonghefei
这个作者很懒,什么都没留下…
展开
-
Java集合类框架源码分析 之 EnumMap源码解析 【17】
类简介:/** * 使用enum类型作为key的特殊Map实现,内部数据结构使用数组来进行数据存储 * * A specialized {@link Map} implementation for use with enum type keys. All * of the keys in an enum map must come from a single enum type that is * specified, explicitly or implicitly, when the原创 2021-03-08 17:33:54 · 135 阅读 · 0 评论 -
Java集合类框架源码分析 之 LinkedHashMap源码解析 【16】
类简介:/** * hash表和链表,和HashMap不同,维持了一个双向链表 * * <p>Hash table and linked list implementation of the <tt>Map</tt> interface, * with predictable iteration order. This implementation differs from * <tt>HashMap</tt> in that原创 2021-03-08 15:36:27 · 158 阅读 · 0 评论 -
Java集合类框架源码分析 之 HashMap源码解析 【15】
类简介:/** * 允许key/value为null,HashMap和Hashtable大致相同(除了不同步及允许null),这个类不保证顺序,其实是它不能保证顺序会随时间保持不变。 * * Hash table based implementation of the <tt>Map</tt> interface. This * implementation provides all of the optional map operations, and perm原创 2021-02-21 15:26:40 · 149 阅读 · 0 评论 -
Java集合类框架源码分析 之 Map接口源码解析 【14】
类简介:/** * 键值对,不能包含重复的键,每个键至多映射一个值。 * An object that maps keys to values. A map cannot contain duplicate keys; * each key can map to at most one value. * * 这个接口替代了Dictionary类,Dictionary是一个抽象类,而不是一个接口。 * <p>This interface takes the place of t原创 2021-02-20 17:30:29 · 141 阅读 · 0 评论 -
Java集合类框架源码分析 之 LinkedTransferQueue源码解析 【13】
看类简介:/** * 生产者可以等待消费者接收元素,当消息在应用传递时,生产者通过 transfer()等待消费者调用 take()/poll()来接收元素,很有用。在其他时候,通过put()可以不等待接收。 * tryTransfer()/tryTransfer(Object) Non-blocking()/tryTransfer(Object,long,TimeUnit) time-out版本也可用。 * 也可以通过hasWaitingConsumer()来查询是否有线程在等待元素,这与pe原创 2021-01-26 17:20:34 · 219 阅读 · 0 评论 -
Java集合类框架源码分析 之 TransferQueue接口源码解析 【12】
先看类简介:/** * 生产者可以等待消费者接收元素,当消息在应用传递时,生产者通过 transfer()等待消费者调用 take()/poll()来接收元素,很有用。在其他时候,通过put()可以不等待接收。 * tryTransfer()/tryTransfer(Object) Non-blocking()/tryTransfer(Object,long,TimeUnit) time-out版本也可用。 * 也可以通过hasWaitingConsumer()来查询是否有线程在等待元素,这与p原创 2021-01-25 15:13:40 · 203 阅读 · 0 评论 -
Java集合类框架源码分析 之 BlockingQueue接口源码解析 【11】
先看类简介:/*** 这是一个队列,当从queue中检索一个元素,或者向queue中插入一个元素的时候,可以进行等待,等待该queue变为非空,及等待queue中有足够的空间可用。* 等待queue变成非空当检索一个元素,并且等待queue中的空间变为可用当存储一个元素的时候。* A {@link java.util.Queue} that additionally supports operations* that wait for the queue to become non-e...原创 2021-01-22 10:36:23 · 193 阅读 · 0 评论 -
Java集合类框架源码分析 之 Queue接口源码解析 【10】
在Java Collection Framework中,继承了Collection接口的主要有List,Queue,Set三大类接口。在上篇文章中,已经对List接口下的源码做了分析,本篇文章开始对Queue接口以及主要的实现类进行分析学习:按照国际惯例,先看类简介,站得高才能看的远,居高临下,用一栏全局的视野来对Queue有一个大致的认识,对该类的学习会有很大的帮助。来,翠花,上酸菜!/* * Written by Doug Lea with assistance from members原创 2021-01-21 16:14:51 · 113 阅读 · 0 评论 -
Java集合类框架源码分析 之 Stack源码解析 【9】
Stack在继承Vector基础上,新增了5个方法,使得Vector实现栈先进后出(FILO)的特性,这5方法分别为: // 在栈顶添加一个元素 public E push(E item) {} // 删除栈顶元素,并返回该元素值 public synchronized E pop() {} // 返回栈顶元素值 public synchronized E peek() {} // 测试栈是否为空 public boolean empty() {}原创 2021-01-21 09:28:11 · 123 阅读 · 1 评论 -
Java集合类框架源码分析 之 Vector源码解析 【8】
按照国际惯例,还是先来看下类简介,有助于从整体上对Vecotr有一个大致的了解:/** * Vector 实现了一个增长的数组对象,像数组一样,通过索引可以访问元素组件。 * 然而,和数组一旦创建后,长度就保持不变的特性来说,在 Vector 创建之后,可以通过add/remove实现数组长度的放缩。 * The {@code Vector} class implements a growable array of * objects. Like an array, it contains c原创 2021-01-20 16:11:34 · 169 阅读 · 0 评论 -
Java集合类框架源码分析 之 AttributeList源码解析 【7】
先看下AttributeList 类简介,对该类有个概括的全局认识:/** * * 代表一个 MBean 的values 列表。 * <p>Represents a list of values for attributes of an MBean. See the * {@link MBeanServerConnection#getAttributes getAttributes} and * {@link MBeanServerConnection#setAttribu..原创 2021-01-19 10:37:16 · 256 阅读 · 1 评论 -
Java集合类框架源码分析 之 RoleList源码解析 【6】
该类继承于ArrayList,针对Role进行了一些扩展。其他方法和ArrayList中基本相同,源码不做针对性分析:看一下类简介:/** * 代表了一个roles的列表,作为方法setRoles()的参数,去创建一个关联关系,并且尝试在同一个关系中设置多个角色。 * A RoleList represents a list of roles (Role objects). It is used as * parameter when creating a relation, and whe原创 2021-01-18 17:41:48 · 455 阅读 · 0 评论 -
Java集合类框架源码分析 之 CopyOnWriteArrayList源码解析 【5】
类简介,主要的特性为:读方法不加锁,修改方法加锁,避免所线程场景所引起的问题,加锁使用final transient ReentrantLock lock = new ReentrantLock(); 来实现锁的获取和释放/** * 该类是ArrayList的一个变体,是线程安全的,所有变更操作(add/set..)都被设计为对底层数组的全新的一个复制操作。 * 怎么理解呢:就是所每次经过add/set等改变结构的操作后,底层数组都是重新创建的,而不是和arraylist一样,在数组的基础上.原创 2021-01-18 16:31:33 · 131 阅读 · 0 评论 -
Java集合类框架源码分析 之 LinkedList源码解析 【4】
上一篇介绍了ArrayList的源码分析【点击看文章】,既然ArrayList都已经做了介绍,那么作为他同胞兄弟的LinkedList,当然必须也配拥有姓名!Talk is cheap,show me code .撸起袖子加油干,废话不多说,我们这就开始。按照之前的惯例,我们还是先来看一下类简介,毕竟这是官方给出的最权威的,带领读者以高屋建瓴,统筹全局的视野来对LinkedList进行一个认识:/** * 实现了List/Deque接口的双向链表,实现了List的所有方法,并且允许包含N原创 2021-01-15 14:39:17 · 154 阅读 · 0 评论 -
Java集合类框架源码分析 之 ArrayList源码解析 【3】
类说明简介: // 这个类和 Vector 基本相同,除了是非同步的。 *(This class is roughly equivalent to * <tt>Vector</tt>, except that it is unsynchronized.) // 通过列表的 ensureCapacity()方法,可以手动指定列表数组的大小,可以减少数组增长期间控件再分配的次数 * <p>An application can increase the cap原创 2021-01-13 20:47:55 · 134 阅读 · 0 评论 -
Java集合类框架源码分析 之 接口中是否可以有方法实现 【2】
提起来接口,大家都知道,接口对应的是规范,只有方法定义,没有方法实现。那么在接口中是否可以有方法实现呢?之前不行,但是在jdk1.8之后,就可以了。在上一篇分析List接口源码时,我们发现,其中有一个方法如下: default void replaceAll(UnaryOperator<E> operator) { Objects.requireNonNull(operator); final ListIterator<E> l原创 2021-01-12 20:00:39 · 164 阅读 · 0 评论 -
Java集合类框架源码分析 之 List 接口源码分析 【1】
想要对Java有一个深入的认识,以及在后续的学习过程中,添加自己的理解,那么,对jdk源码的学习就是必不可少,毕竟第一手的学习资料就是源码。但是学习源码是一个系统而又庞杂的工程,涉及到Java的诸多模块,每个模块的诸多细节,相近知识点之间的区分,关联等等,想要有一个系统的认识,耗费大量的精力心力是肯定的。系统的分析源码,之前很早就有这个想法,但是因为懒,因为忙,因为其他种种,一直未能成行,结果也很明确,很多通过学习源码才能达到的理解,通过源码才能解决的困难,数年如一日,仍然横亘在自己的面前,犹如一面原创 2021-01-12 19:16:48 · 321 阅读 · 2 评论