随笔分类 - java集合框架
说明:准备将java集合类相关知识点进行总结,加深记忆。
摘要:前言:ConcurrentHashMap是HashMap的线程安全版本,内部使用了数组+链表+红黑树的结构来存储数据,相对于同样线程安全的Hashtable来说,它在效率方面有很大的提升,因此多线程环境下更多的是使用ConcurrentHashMap,因此有必要对其原理进行分析。 注:本文jdk源码
阅读全文
摘要:前言:LinkedHashMap继承HashMap,所以它是线程不安全的,但是它有序,下面就让我们来对其内部原理进行分析。 注:本文jdk源码版本为jdk1.8.0_172 1.LinkedHashMap介绍 LinkedHashMap底层数据结构为双向链表,能保证元素按照插入顺序访问,也能以访问顺
阅读全文
摘要:前言:CopyOnWriteArrayList为ArrayList的线程安全版本,这里来分析下其内部是如何实现的。 注:本文jdk源码版本为jdk1.8.0_172 1.CopyOnWriteArrayList介绍 CopyOnWriteArrayList是ArrayList的线程安全版本,因此其底
阅读全文
摘要:前言:作为一个常用的List接口实现类,日常开发过程中使用率非常高,因此有必要对其原理进行分析。 注:本文jdk源码版本为jdk1.8.0_172 1.ArrayList介绍 ArrayList底层数据结构是数组(数组是一组连续的内存空间),默认容量为10,它具有动态扩容的能力,线程不安全,元素可以
阅读全文
摘要:前言:WeakHashMap可能平时使用的频率并不高,但是你可能听过WeakHashMap会进行自动回收吧,下面就对其原理进行分析。 注:本文jdk源码版本为jdk1.8.0_172 1.WeakHashMap介绍 WeakHashMap是一种弱引用的map,底层数据结构为数组+链表,内部的key存
阅读全文
摘要:前言:LinkedList的底层数据结构是双向链表,下面具体分析其实现原理。 注:本文jdk源码版本为jdk1.8.0_172 1..LinkedList介绍 LinkedList继承于AbstractSequentialList的双向链表,实现List接口,因此也可以对其进行队列操作,它也实现了D
阅读全文
摘要:前言:Hashtable线程安全的集合类,虽然它线程安全,然而在日常开发中使用的频率很低,毕竟锁的颗粒度太大了。但是这并不妨碍我们对其内部原理进行了解。 注:本文jdk源码版本为jdk1.8.0_172。 1.Hashtable基本概念 Hashtable与HashMap一样,都是以键值对的形式存储
阅读全文
摘要:前言:本以为(OutOfMemoryError)OOM问题会离我们很远,但在一次生产上线灰度的过程中就出现了Java.Lang.OutOfMemoryError:Java heap space异常,通过对线上日志的查看,最终定位到ArrayList#addAll方法中,出现这个问题的原因是:由于历史
阅读全文
摘要:前言:上篇文章,笔者分析了jdk1.7中HashMap的源码,这里将对jdk1.8的HashMap的源码进行分析。 注:本文jdk源码版本为jdk1.8.0_172 1.再看put操作 jdk1.8中的hash算法: 再看put操作的核心函数: 重点: jdk1.8中HashMap在进行put操作时
阅读全文
摘要:前言:相信不管在生产过程中还是面试过程中,HashMap出现的几率都非常的大,因此有必要对其源码进行分析,但要注意的是jdk1.8对HashMap进行了大量的优化,因此笔者会根据不同版本对HashMap进行分析,首先我们来看jdk1.7中HashMap的原理。 注:本文jdk源码版本为jdk1.7.
阅读全文
摘要:前言:我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢,本文将对该问题进行解密。 1.jdk1.7中的HashMap 在jdk1.8中对HashMap做了很多优化,这里先分析在jdk1.7中的问题,相信大家都知道在jdk1.7多线程环境下Hash
阅读全文
摘要:前言:通常大家都知道HashMap的底层数据结构为数组加链表的形式,但其put操作具体是怎样执行的呢,本文通过调试HashMap的源码来阐述这一问题。 注:jdk版本:jdk1.7.0_51 1.put源码 下面通过对源码调试具体说明put操作的流程。 2.具体调试过程 说明: ①不同内容的字符串,
阅读全文