
集合
文章平均质量分 75
MrFC
这个作者很懒,什么都没留下…
展开
-
LinkedBlockingQueue源码解析
在Java中有这么一个接口BlockingQueue,它的子类有ArrayBlockingQueue和LinkedBlockingQueue,它们通常被称为阻塞队列。关于阻塞队列,通常是用于解决“生产者——消费者”问题,而在本文中只针对LinkedBlockingQueue的源码进行讲解。本人建议是在阅读本文之前,先了解ArrayBlockingQueue(其中有对阻塞队列更加详细的描述)。LinkedBlockingQueue重要属性// 队列最大容量private final int capac原创 2021-03-24 20:53:54 · 1361 阅读 · 0 评论 -
ArrayBlockingQueue源码解析
在面试和平常的开发工作中,几乎都会遇到所谓的“生产者——消费者”问题。生产者——消费者在这个问题中需要有两个角色和一个仓库。仓库:用来存储生产者生产出来的产品生产者:生产产品,并将产品存入仓库中消费者:消费产品,从仓库中获取产品进行消费那么针对于这样的场景,如何用Java来实现?首先我们需要考虑的是,供需问题。生产者要一直生产产品吗?当然不是,生产多少产品主要依据是仓库的容量,当仓库爆满就应该停止生产。那消费者要一直消费吗?当然也不是,当前是否能够消费产品,主要依据仓库中是否存原创 2021-03-24 18:57:50 · 1512 阅读 · 0 评论 -
CopyOnWriteArrayList源码解析
作为Java开发者都应该知道工作中最常用的ArrayList集合是属于线程不安全的。在它的底层源码实现中,没有限制线程的读写操作,因此在多线程的环境下,使用ArrayList是不够合理的。想要线程安全,那么就使用Vector或者Collections工具类中的SynchronizedList吧。但是对于这两种集合来说,它的线程安全效果的底层实现是直接使用synchronize关键字修饰方法,也就是对整个集合上了锁,同一个时刻只能有一个线程方法访问集合。毫无疑问,效率太低,得不偿失。针对于以上的问题,Co原创 2021-03-24 14:51:38 · 1520 阅读 · 1 评论 -
HashMap源码解析
想要了解HashMap集合,先来了解其中的哈希值计算原理为何哈希?Hash也称散列、哈希,其中基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而这个输入出后的固定长度的结果(二进制串)就是哈希值。但是由于通过Hash算法产生的哈希值是有限的,而存储的数据可以说是无限的。这样就可能会导致存储的数据不同,而两者产生的哈希值却相同,此情况称为哈希冲突。HashMap的如何解决哈希冲突?为了更好的解决这个问题,我们先来了解HashMap类中的基本信息属原创 2021-03-19 19:18:42 · 1449 阅读 · 0 评论 -
LinkedList源码解析
LinkedList集合是平时工作中常用的集合之一,它的增删操作效率高,但是相对它的查询效率就不如ArrayList集合了。对于想要了解ArrayList集合的朋友可以看我另外一篇博客ArrayList源码解析,本文只针对LinkedList集合的源码讲解分析。LinkedList的基本信息属性// 列表中的元素个数transient int size = 0;// 列表中第一个元素transient Node<E> first;// 列表中最后一个元素transient No原创 2021-03-18 19:53:37 · 1460 阅读 · 0 评论 -
ArrayList源码解析
在日常的研发工作和个人项目中,ArrayList可以说是Java中最为常用的集合之一。同时作为Java研发工程师,不能仅仅满足于表面使用,对其中实现的逻辑和源码也需要有一定的了解。ArrayList的基本信息属性// 列表初始默认容量private static final int DEFAULT_CAPACITY = 10;// 存放元素的数组(由此可知,ArrayList的底层实现依赖的是数组)transient Object[] elementData;// 列表中元素的个数priv原创 2021-03-18 15:51:12 · 1351 阅读 · 0 评论