ReentrantLock简介 ReentrantLock是一个可重入且独占式的锁,它具有与使用synchronized监视器锁相同的基本行为和语义,但与synchronized关键字相比,它更灵活.更强大,增加了轮询.超时.中断等高级功能.ReentrantLock,顾名思义,它是支持可重入锁的锁,是一种递归无阻塞的同步机制.除此之外,该锁还支持获取锁时的公平和非公平选择. ReentrantLock的类图如下: ReentrantLock的内部类Sync继承了AQS,分为公平锁FairSyn…
手写Java HashMap核心源码 上一章手写LinkedList核心源码,本章我们来手写Java HashMap的核心源码. 我们来先了解一下HashMap的原理.HashMap 字面意思 hash + map,map是映射的意思,HashMap就是用hash进行映射的意思.不明白?没关系.我们来具体讲解一下HashMap的原理. HashMap 使用分析 //1 存 HashMap<String,String> map = new HashMap<>(); map.put(&…
手写 Java HashMap 核心源码 手写 Java HashMap 核心源码 上一章手写 LinkedList 核心源码,本章我们来手写 Java HashMap 的核心源码. 我们来先了解一下 HashMap 的原理.HashMap 字面意思 hash + map,map 是映射的意思,HashMap 就是用 hash 进行映射的意思.不明白?没关系.我们来具体讲解一下 HashMap 的原理. HashMap 使用分析 //1 存 HashMap<String,String> map…
勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇文章介绍了类加载器分类以及类加载器的双亲委派模型,让我们能够从整体上对类加载器有一个大致的认识,本文会深入到类加载器源码分析,了解类加载器ClassLoader中核心的源码,并且分析ClassLoader中的设计思想或者设计模式! 本文地图: 一.ClassLoader核心API介绍 当你要学习类的时候,首先我们要做的就是这个类API文档,下面我们从JDK API文档对 Cla…
概述 LinkedHashMap是Java中常用的数据结构之一,安卓中的LruCache缓存,底层使用的就是LinkedHashMap,LRU(Least Recently Used)算法,即最近最少使用算法,核心思想就是当缓存满时,会优先淘汰那些近期最少使用的缓存对象 LruCache的缓存算法 LruCache采用的缓存算法为LRU(Least Recently Used),最近最少使用算法.核心思想是当缓存满时,会首先把那些近期最少使用的缓存对象淘汰掉 LruCache的实现 LruCac…
上一章我们手写了ArrayList的核心源码,ArrayList底层是用了一个数组来保存数据,数组保存数据的优点就是查找效率高,但是删除效率特别低,最坏的情况下需要移动所有的元素.在查找需求比较重要的情况下可以用ArrayList,如果是删除操作比较多的情况下,用ArrayList就不太合适了.Java为我们提供了LinkedList,是用链接来实现的,我们今天就来手写一个QLinkedList,来提示底层是怎么做的. 如上图,底层用一个双链表,另外有两个指示器,一个指向头,一个指向尾. 链表中…
手写ArrayList核心源码 ArrayList是Java中常用的数据结构,不光有ArrayList,还有LinkedList,HashMap,LinkedHashMap,HashSet,Queue,PriorityQueue等等,我们将手写这些常用的数据结构的核心源码,用尽量少的代码来揭示核心原理. 下面我们来手写ArrayList的核心源码 首先我们定义一个QArrayList,不要问为什么叫QArrayList,因为我之前写过Qt,仅此而已.源码 public class<T> QAr…
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 上一篇基于哈希表实现HashMap核心源码彻底分析 分析了HashMap的源码,主要分析了扩容机制,如果感兴趣的可以去看看,扩容机制那几行最难懂的代码真是花费了我很大的精力. 好了本篇我们分析一下HashMap的儿子LinkedHashMap的核心源码,提到LinkedHashMap做安卓的同学肯定会想到Lru(Least Recently Used)算法,Lru算法就是基于LinkedHashMap来实现的,明白了LinkedHashMap…
前言 SynchronousQueue 是一个普通用户不怎么常用的队列,通常在创建无界线程池(Executors.newCachedThreadPool())的时候使用,也就是那个非常危险的线程池 ^_^. 它是一个非常特殊的阻塞队列,他的模式是:在 offer的时候,如果没有另一个线程在 take 或者 poll 的话,就会失败,反之,如果在 take或者 poll的时候,没有线程在offer ,则也会失败,而这种特性,则非常适合用来做高响应并且线程不固定的线程池的Queue.所以,在很多高性…
摘要 对于Java开发人员来说,能够熟练地掌握java的集合类是必须的,本节想要跟大家共同学习一下JDK1.8中HashMap的底层实现与源码分析.HashMap是开发中使用频率最高的用于映射(键值对)处理的数据结构,而在JDK1.8中HashMap采用位桶数组+链表+红黑树实现的,现在我们深入探究一下HashMap的结构实现 一.HashMap简介 1.特点 HashMap根据键的hashcode值存储数据,大多数情况可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序是不确定的 想要使得…